誕生日を格納するのに最適なMySQLの型はDATE型です。

この型は、日付情報(年、月、日)を格納するのに最適で、誕生日のような情報を扱う場合に使います。

DATE型は、'YYYY-MM-DD'の形式で日付を保存します。

DATE型を使うことで、MySQLの関数を利用して日付の計算や比較が容易になります。

以下のSQL文はidと名前と誕生日からなるusersテーブルです。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    birthday DATE
);

上記users表にあわせたUserクラスを作成します。

Javaで誕生日を格納するのに最適な型はjava.time.LocalDateです。

このクラスは年、月、日を表現するのに適しています。

LocalDateは時刻の情報を含まず、日付のみを扱います。

この例では、LocalDate.ofメソッドを使用して特定の日付を作成し、Userオブジェクトに設定しています。

また、LocalDateクラスを使用することで、日付の操作が簡単に行えるようになります。

例えば、誕生日から年齢を計算する場合もLocalDateを使うと便利です。

package model;
import java.time.LocalDate;

public class User {
    private int id;
    private String name;
    private LocalDate birthday;

    public User(int id, String name, LocalDate birthday) {
        this.id = id;
        this.name = name;
        this.birthday = birthday;
    }

    // Getter and Setter methods
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public LocalDate getBirthday() {
        return birthday;
    }

    public void setBirthday(LocalDate birthday) {
        this.birthday = birthday;
    }
}

参考に上記のusers表とuserクラスを使うUserDaoクラスを作成します。

ただし、研修で学んだSuperDaoクラスを継承するものとします。

package model.dao;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;

import model.User;

public class UserDao extends SuperDao {

	// ユーザーをデータベースに挿入するメソッド
	public void insertUser(User user) {
		this.connect();
		String sql = "INSERT INTO users (name, birthday) VALUES (?, ?)";
		try (PreparedStatement stmt = con.prepareStatement(sql)) {
			stmt.setString(1, user.getName());
			stmt.setDate(2, Date.valueOf(user.getBirthday()));
			stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// ユーザーをIDで検索するメソッド
	public User getUserById(int id) {
		String sql = "SELECT * FROM users WHERE id = ?";
		try (PreparedStatement stmt = con.prepareStatement(sql)) {
			stmt.setInt(1, id);
			try (ResultSet rs = stmt.executeQuery()) {
				if (rs.next()) {
					String name = rs.getString("name");
					LocalDate birthday = rs.getDate("birthday").toLocalDate();
					return new User(id, name, birthday);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	// メインメソッドの例
	public static void main(String[] args) {
		UserDao dao = new UserDao();
		User user = new User(1, "今井", LocalDate.of(1990, 5, 25));
		dao.insertUser(user);

		User retrievedUser = dao.getUserById(1);
		if (retrievedUser != null) {
			System.out.println("名前: " + retrievedUser.getName());
			System.out.println("誕生日: " + retrievedUser.getBirthday());
		}
	}
}

実行結果の例

データベースへの接続に成功しました。
名前: 今井
誕生日: 1990-05-25

以上。

最後までお読みいただきありがとうございます。