MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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.Datejava.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型カラムに日付を挿入するには、以下の手順が基本となります。

  1. java.util.Datejava.sql.Dateに変換する
  2. DriverManager.getConnection()でデータベースに接続する
  3. PreparedStatementとプレースホルダを使ってSQL文を準備する
  4. setDate()メソッドで日付をバインドし、executeUpdate()で実行する

StatementではなくPreparedStatementを使うことで、SQLインジェクションのリスクを回避しつつ、安全かつ効率的にデータ操作が行えます。日付以外のデータ型を挿入する場合も同様の手法が応用できるので、ぜひ参考にしてください。

  1. JavaでMySQLテーブルに1つのカラムのみを挿入する方法

    JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m

  2. 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