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