誕生日を格納するのに最適な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 |
以上。