Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに
JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。
本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。
1. サンプルテーブルの作成
まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。
mysql> create table DemoTable(
PassengerId int,
PassengerName varchar(40),
ArrivalDate date
);
Query OK, 0 rows affected (0.82 sec)
このテーブルは、乗客ID(int型)、乗客名(varchar型)、到着日(date型)の3つのカラムを持つシンプルな構造です。
2. Javaコードで日付を挿入する
次に、Javaから日付データを挿入するコードを見ていきましょう。ポイントは、java.util.Dateをjava.sql.Dateに変換することです。JDBCの日付設定メソッドにはjava.sql.Date型が必要になるためです。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InsertDateFromJava {
public static void main(String[] args) {
Connection con = null;
PreparedStatement ps = null;
try {
// java.util.Date を java.sql.Date に変換
java.util.Date javaDate = new java.util.Date();
java.sql.Date mySQLDate = new java.sql.Date(javaDate.getTime());
// データベースへ接続
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/web?useSSL=false", "root", "123456");
// プレースホルダ(?)を使ったINSERT文を準備
String query = "insert into DemoTable(PassengerId,PassengerName,ArrivalDate) values(?,?,?)";
ps = con.prepareStatement(query);
// パラメータをセット
ps.setInt(1, 101);
ps.setString(2, "Adam");
ps.setDate(3, mySQLDate);
// 実行
ps.executeUpdate();
System.out.println("Record is inserted with current Date......");
} catch (Exception e) {
e.printStackTrace();
}
}
}
コードのポイント
- 日付の変換:
new java.sql.Date(javaDate.getTime())により、Javaの汎用日付オブジェクトをJDBC用のSQL日付型へ変換しています。 - プレースホルダの使用: SQL文に「?」を記述し、
setInt()・setString()・setDate()で順番に値をバインドします。 - setDate()メソッド: 3番目のパラメータに
java.sql.Dateを渡すことで、DATE型カラムに正しく日付が挿入されます。 - try-catchによる例外処理: 接続エラーなどが発生した場合にスタックトレースを出力します。
3. 実行結果の確認
プログラムを実行すると、コンソールに次のようなメッセージが表示されます。
Record is inserted with current Date......
このメッセージは、レコードが正常に登録されたことを示しています。
4. テーブル内のレコードを確認する
実際にデータが挿入されたか、MySQL側でSELECT文を実行して確認してみましょう。
mysql> select * from DemoTable;
実行すると、以下のように現在の日付が登録されたレコードが表示されます。
+-------------+---------------+-------------+ | PassengerId | PassengerName | ArrivalDate | +-------------+---------------+-------------+ | 101 | Adam | 2019-09-07 | +-------------+---------------+-------------+ 1 row in set (0.00 sec)
ArrivalDateカラムに、Javaプログラム実行時の日付が「YYYY-MM-DD」形式で正しく格納されていることがわかります。
まとめ
JavaからMySQLのDATE型カラムに日付を挿入するには、以下の手順が基本となります。
java.util.Dateをjava.sql.Dateに変換するDriverManager.getConnection()でデータベースに接続する- PreparedStatementとプレースホルダを使ってSQL文を準備する
setDate()メソッドで日付をバインドし、executeUpdate()で実行する
StatementではなくPreparedStatementを使うことで、SQLインジェクションのリスクを回避しつつ、安全かつ効率的にデータ操作が行えます。日付以外のデータ型を挿入する場合も同様の手法が応用できるので、ぜひ参考にしてください。
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m
-
JavaでMySQLデータベースにNULL値を挿入する方法
JavaからデータベースにNULL値を挿入したいケースはよくあります。その場合、PreparedStatementのsetNull()メソッドを使用します。基本的な構文は以下の通りです。ps.setNull(インデックス番号, Types.NULL);この記事では、実際にサンプルを通してNULL値の挿入手順を解説します。1. テーブルの作成まず、MySQLでテスト用のテーブルを作成します。mysql> create table DemoTable1893 ( FirstName varchar(20) ); Query OK, 0 rows affected (0