"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > h2 데이터베이스에서 JDBC를 사용하여`java.time.localdate` 오브젝트 삽입 및 얻기위한 팁

h2 데이터베이스에서 JDBC를 사용하여`java.time.localdate` 오브젝트 삽입 및 얻기위한 팁

2025-04-29에 게시되었습니다
검색:502

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 유형 (예 : 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와 호환되는 드라이버의 예 :

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.*;
java.time.localdate 가져 오기;

공개 클래스 LocalDateExample {

    public static void main (String [] args)은 sqlexception {
        문자열 URL = "jdbc : h2 : mem : test_db"; // 데이터베이스 URL로 변경합니다
        문자열 사용자 = "사용자";
        문자열 비밀번호 = "비밀번호";

        노력하다 (
                Connection Conn = DriverManager.GetConnection (URL, USER, PASSFARPT);
                문자 stmt = conn.createstatement ();
        ) {
            stmt.execute ( "직원이 없으면 테이블 생성 (ID int 기본 키, 이름 varchar (255), 생일 날짜));

            // LocalDate 값을 삽입합니다
            현지 데이트 오늘 = localdate.now ();
            java.sql.date sqldate = java.sql.date.valueof (오늘);

            preadstatement pstmt = conn.preparestatement ( "직원 삽입 (이름, 생일) 값 (?,?)");
            PSTMT.SETSTRING (1, "John Doe");
            pstmt.setdate (2, sqldate); // localDate를 Java.SQL.Date로 변환합니다
            pstmt.executeupdate ();

            // LocalDate 값을 검색합니다
            resultSet rs = stmt.executeQuery ( "select * from EmployE");
            while (rs.next ()) {
                java.sql.date sqldate = rs.getDate ( "생일");
                LocalDate 생일 = 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