「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > H2データベースでJDBCを使用して「Java.time.localdate」オブジェクトを挿入して取得するためのヒント

H2データベースでJDBCを使用して「Java.time.localdate」オブジェクトを挿入して取得するためのヒント

2025-04-29に投稿されました
ブラウズ:597

How to Insert and Retrieve `java.time.LocalDate` Objects in an H2 Database Using JDBC?

JDBCを使用して、H2データベースなどのSQLデータベースに Java.Time.LocalDate オブジェクト

を挿入して取得します

質問:

H2データベースエンジンなどのSQLデータベースに java.time タイプ(e.g. localdate

)を挿入して取得する方法?

答え:

方法1:JDBC 4.2と互換性のあるドライバー

JDBC 4.2仕様以降に準拠したJDBCドライバーの場合、 setObject および getObject メソッドを直接使用できます。ドライバーは、Javaタイプを自動的に検出し、対応するSQLタイプに変換します。例えば:

preparedStatement.setObject(1, myLocalDate); // LocalDate转换为SQL DATE
LocalDate localDate = myResultSet.getObject("my_date_column_", LocalDate.class); // 指定预期类以确保类型安全

方法2:JDBC 4.2の前のドライバーの古いバージョン

jdbc 4.2と互換性がないドライバーの場合、

java.time オブジェクトを等価 java.sql タイプに簡単に変換する必要があります。古いクラスに追加された変換方法を使用します:

java.sql.Date mySqlDate = java.sql.Date.valueOf(myLocalDate);
preparedStatement.setDate(1, mySqlDate);
java.sql.Date sqlDate = myResultSet.getDate("date_"); //尽可能简短地处理转换
LocalDate localDate = sqlDate.toLocalDate();

JDBC 4.2と互換性のあるドライバーの例:

import java.sql.*;
import java.time.LocalDate;
import java.time.ZoneId;

public class LocalDateExample {

    public static void main(String[] args) throws SQLException {
        String url = "jdbc:h2:mem:test_db"; // 更改为您的数据库URL
        String user = "user";
        String password = "password";

        try (
                Connection conn = DriverManager.getConnection(url, user, password);
                Statement stmt = conn.createStatement();
        ) {
            stmt.execute("CREATE TABLE IF NOT EXISTS employees (id INT PRIMARY KEY, name VARCHAR(255), birthday DATE)");

            // 插入LocalDate值
            LocalDate today = LocalDate.now(ZoneId.of("America/Montreal"));

            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (name, birthday) VALUES (?, ?)");
            pstmt.setString(1, "John Doe");
            pstmt.setObject(2, today); // 直接传递LocalDate
            pstmt.executeUpdate();

            // 检索LocalDate值
            ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
            while (rs.next()) {
                LocalDate birthday = rs.getObject("birthday", LocalDate.class); // 指定预期类
                System.out.println("员工:"   rs.getString("name")   ",生日:"   birthday);
            }

            rs.close();
            pstmt.close();
            stmt.close();
        }
    }
}

レガシードライバーの例:

 Import java.sql。*;
Import Java.time.localdate;

Public Class LocalDateExample {

    public static void main(string [] args)はsqlexceptionをスローします{
        string url = "jdbc:h2:mem:test_db"; //データベースURLに変更します
        string user = "user";
        文字列password = "password";

        試す (
                接続conn = drivermanager.getConnection(url、user、password);
                ステートメントstmt = conn.createstatement();
        ){
            stmt.execute( "従業員が存在しない場合はテーブルを作成します(id int primary key、name varchar(255)、誕生日の日付)");

            // localdate値を挿入します
            LocalDate Today = localdate.now();
            java.sql.date sqldate = java.sql.date.valueof(Today);

            preatedStatement pstmt = conn.preparestatement( "従業員の挿入(名前、誕生日)値(?、?)");
            pstmt.setString(1、 "John Doe");
            pstmt.setdate(2、sqldate); // localdateをjava.sql.dateに変換します
            pstmt.executeupdate();

            // LocalDate値を検索します
            resultet rs = stmt.executequery( "select * from Employees");
            while(rs.next()){
                java.sql.date sqldate = rs.getDate( "誕生日");
                LocalDate Birthday = sqldate.tolocaldate(); // java.sql.dateをLocalDateに変換します
                System.out.println( "従業員:" rs.getString( "name") "、誕生日:"誕生日);
            }

            rs.close();
            pstmt.close();
            stmt.close();
        }
    }
}  
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3