> 데이터 베이스 > MySQL 튜토리얼 > JDBC를 사용하여 Postgres 또는 H2 데이터베이스에 Java `java.time` 객체를 효율적으로 삽입하고 검색하려면 어떻게 해야 합니까?

JDBC를 사용하여 Postgres 또는 H2 데이터베이스에 Java `java.time` 객체를 효율적으로 삽입하고 검색하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-22 01:42:08
원래의
646명이 탐색했습니다.

JDBC를 효율적으로 사용하여 Java를 운영합니다. java.time객체는 PostgreSQL 또는 H2 데이터베이스와 상호 작용합니다

How can I efficiently insert and retrieve Java `java.time` objects into and from a Postgres or H2 database using JDBC?

이 기사에서는 JDBC를 효율적으로 사용하여 PostgreSQL 또는 H2 데이터베이스에서 java.time와 같은 Java LocalDate 객체를 삽입하고 검색하는 방법을 살펴봅니다.

기존 방법: PreparedStatement::setDateResultSet::getDate

사용

기존 접근 방식은 java.sql.DatePreparedStatement::setDate을 사용하여 작업하는 오래된 ResultSet::getDate 유형에 의존합니다. 그러나 이러한 문제를 방지하려면 현대적인 방법이 권장됩니다.

현대적인 접근 방식: java.time유형

직접 조작

JDBC 4.2 이상과 호환되는 드라이버

가장 효과적인 방법은 JDBC 4.2 이상과 호환되는 드라이버를 사용하는 것입니다. 이러한 드라이버는 유형 변환 없이 java.time 개체를 직접 지원합니다.

데이터 삽입: PreparedStatement::setObject(1, myLocalDate)을 사용합니다. 여기서 myLocalDateLocalDate 개체 인스턴스입니다. 드라이버는 자동으로 적절한 SQL 유형을 감지하고 변환합니다.

데이터 검색: ResultSet::getObject("my_date_column_", LocalDate.class)을 사용하여 LocalDate 개체를 검색합니다. 예상되는 클래스를 지정하면 유형 안전성이 보장됩니다.

레거시 드라이버(JDBC 4.2 이하)

JDBC 4.2 이상과 호환되지 않는 드라이버의 경우 임시로 java.time 개체를 해당 java.sql 유형으로 또는 그 반대로 변환해야 합니다.

java.sql.Date.valueOf(myLocalDate)을 사용하여 LocalDatejava.sql.Date로 변환하세요.

데이터 삽입: preparedStatement.setDate(1, java.sql.Date.valueOf(myLocalDate))을 사용하세요.

데이터 검색: rs.getDate(1)을 사용하여 java.sql.Date 개체를 가져온 다음 sqlDate.toLocalDate()을 사용하여 LocalDate로 변환합니다.

JDBC 4.2 호환 드라이버를 사용한 샘플 코드

<code class="language-java">import java.sql.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.UUID;

public class App {

    public static void main(String[] args) {
        try {
            Class.forName("org.h2.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try (
                Connection conn = DriverManager.getConnection("jdbc:h2:mem:trash_me_db_");
                Statement stmt = conn.createStatement();
        ) {
            String tableName = "test_";
            String sql = "CREATE TABLE " + tableName + " (" +
                    "id_ UUID DEFAULT random_uuid() PRIMARY KEY ," +
                    "date_ DATE NOT NULL" +
                    ");";
            stmt.execute(sql);

            sql = "INSERT INTO test_ (date_) VALUES (?) ;";
            try (PreparedStatement preparedStatement = conn.prepareStatement(sql);) {
                LocalDate today = LocalDate.now(ZoneId.of("America/Montreal"));
                preparedStatement.setObject(1, today.minusDays(1));
                preparedStatement.executeUpdate();
                preparedStatement.setObject(1, today);
                preparedStatement.executeUpdate();
                preparedStatement.setObject(1, today.plusDays(1));
                preparedStatement.executeUpdate();
            }

            sql = "SELECT * FROM test_";
            try (ResultSet rs = stmt.executeQuery(sql);) {
                while (rs.next()) {
                    UUID id = rs.getObject("id_", UUID.class);
                    LocalDate localDate = rs.getObject("date_", LocalDate.class);
                    System.out.println("id_: " + id + " | date_: " + localDate);
                }
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}</code>
로그인 후 복사

실행 결과는 다음과 유사합니다.

<code>id_: e856a305-41a1-45fa-ab69-cfa676285461 | date_: 2017-03-26
id_: a4474e79-3e1f-4395-bbba-044423b37b9f | date_: 2017-03-27
id_: 5d47bc3d-ebfa-43ab-bbc2-7bb2313b33b0 | date_: 2017-03-28</code>
로그인 후 복사

이전 버전의 드라이버를 사용한 샘플 코드 (원본 코드와 동일하며 여기서 반복하지 않습니다.)

올바른 JDBC 드라이버를 선택하고 적절한 방법을 사용하면 데이터베이스와 효율적이고 유형이 안전한 상호 작용을 보장할 수 있습니다. 코드를 단순화하고 효율성을 높이려면 JDBC 4.2 이상과 호환되는 드라이버를 우선적으로 사용하는 것을 잊지 마세요.

위 내용은 JDBC를 사용하여 Postgres 또는 H2 데이터베이스에 Java `java.time` 객체를 효율적으로 삽입하고 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿