Heim > Datenbank > MySQL-Tutorial > Wie füge ich „java.time.LocalDate'-Objekte in eine H2-Datenbank mit JDBC ein und rufe sie ab?

Wie füge ich „java.time.LocalDate'-Objekte in eine H2-Datenbank mit JDBC ein und rufe sie ab?

Mary-Kate Olsen
Freigeben: 2025-01-22 01:47:09
Original
213 Leute haben es durchsucht

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

Verwenden Sie JDBC, um java.time.LocalDate Objekte in SQL-Datenbanken wie der H2-Datenbank einzufügen und abzurufen

Frage:

Wie füge ich java.time-Typen (z. B. LocalDate) in eine SQL-Datenbank wie die H2-Datenbank-Engine mithilfe von JDBC ein und rufe sie ab?

Antwort:

Methode 1: Treiber kompatibel mit JDBC 4.2

Für JDBC-Treiber, die mit der Spezifikation JDBC 4.2 oder höher kompatibel sind, können Sie die Methoden setObject und getObject direkt verwenden, um java.time-Objekte zu verarbeiten. Der Treiber erkennt automatisch Java-Typen und konvertiert sie in entsprechende SQL-Typen. Zum Beispiel:

<code class="language-java">preparedStatement.setObject(1, myLocalDate); // LocalDate转换为SQL DATE
LocalDate localDate = myResultSet.getObject("my_date_column_", LocalDate.class); // 指定预期类以确保类型安全</code>
Nach dem Login kopieren

Methode 2: Alte Treiberversion vor JDBC 4.2

Für Treiber, die nicht JDBC 4.2-kompatibel sind, müssen Sie ein java.time-Objekt kurzzeitig in einen äquivalenten java.sql-Typ konvertieren und umgekehrt. Verwenden Sie die zur Legacy-Klasse hinzugefügte Konvertierungsmethode:

<code class="language-java">java.sql.Date mySqlDate = java.sql.Date.valueOf(myLocalDate);
preparedStatement.setDate(1, mySqlDate);
java.sql.Date sqlDate = myResultSet.getDate("date_"); //尽可能简短地处理转换
LocalDate localDate = sqlDate.toLocalDate();</code>
Nach dem Login kopieren

Beispiel für einen mit JDBC 4.2 kompatiblen Treiber:

<code class="language-java">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();
        }
    }
}</code>
Nach dem Login kopieren

Beispiel für einen alten Treiber:

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

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();
            java.sql.Date sqlDate = java.sql.Date.valueOf(today);

            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (name, birthday) VALUES (?, ?)");
            pstmt.setString(1, "John Doe");
            pstmt.setDate(2, sqlDate); // 将LocalDate转换为java.sql.Date
            pstmt.executeUpdate();

            // 检索LocalDate值
            ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
            while (rs.next()) {
                java.sql.Date sqlDate = rs.getDate("birthday");
                LocalDate birthday = sqlDate.toLocalDate(); // 将java.sql.Date转换为LocalDate
                System.out.println("员工:" + rs.getString("name") + ",生日:" + birthday);
            }

            rs.close();
            pstmt.close();
            stmt.close();
        }
    }
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie füge ich „java.time.LocalDate'-Objekte in eine H2-Datenbank mit JDBC ein und rufe sie ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage