Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh memasukkan dan mendapatkan semula objek Java `java.time` dengan cekap ke dalam dan dari pangkalan data Postgres atau H2 menggunakan JDBC?

Bagaimanakah saya boleh memasukkan dan mendapatkan semula objek Java `java.time` dengan cekap ke dalam dan dari pangkalan data Postgres atau H2 menggunakan JDBC?

Susan Sarandon
Lepaskan: 2025-01-22 01:42:08
asal
646 orang telah melayarinya

Gunakan JDBC dengan cekap untuk mengendalikan Java java.timeObjek berinteraksi dengan pangkalan data PostgreSQL atau H2

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

Artikel ini meneroka cara menggunakan JDBC dengan cekap untuk memasukkan dan mendapatkan semula objek Java java.time, seperti LocalDate, dalam pangkalan data PostgreSQL atau H2.

Kaedah tradisional: gunakan PreparedStatement::setDate dan ResultSet::getDate

Pendekatan tradisional bergantung pada jenis java.sql.Date usang, menggunakan PreparedStatement::setDate dan ResultSet::getDate untuk operasi. Walau bagaimanapun, untuk mengelakkan masalah ini, kaedah moden disyorkan.

Pendekatan moden: manipulasi langsung java.timejenis

Pemandu serasi dengan JDBC 4.2 dan ke atas

Kaedah yang paling berkesan ialah menggunakan pemandu yang serasi dengan JDBC 4.2 dan ke atas. Pemacu ini menyokong java.time objek secara langsung, tanpa penukaran jenis.

Sisipkan data: gunakan PreparedStatement::setObject(1, myLocalDate), dengan myLocalDate ialah contoh objek LocalDate. Pemacu secara automatik mengesan dan menukar kepada jenis SQL yang sesuai.

Dapatkan semula data: Gunakan ResultSet::getObject("my_date_column_", LocalDate.class) untuk mendapatkan semula LocalDate objek. Menentukan kelas yang dijangka memastikan keselamatan jenis.

Pemandu lama (di bawah JDBC 4.2)

Untuk pemandu yang tidak serasi dengan JDBC 4.2 dan ke atas, anda perlu menukar objek java.time kepada jenis java.sql yang setara dan sebaliknya.

Gunakan java.sql.Date.valueOf(myLocalDate) untuk menukar LocalDate kepada java.sql.Date.

Sisipkan data: gunakan preparedStatement.setDate(1, java.sql.Date.valueOf(myLocalDate)).

Dapatkan data: Gunakan rs.getDate(1) untuk mendapatkan objek java.sql.Date, kemudian gunakan sqlDate.toLocalDate() untuk menukarnya kepada LocalDate.

Contoh kod menggunakan pemacu serasi 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>
Salin selepas log masuk

Hasil larian adalah serupa dengan:

<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>
Salin selepas log masuk

Contoh kod menggunakan versi lama pemandu (Sama seperti kod asal dan tidak akan diulang di sini)

Dengan memilih pemacu JDBC yang betul dan menggunakan kaedah yang sesuai, anda boleh memastikan interaksi yang cekap dan selamat jenis dengan pangkalan data anda. Ingat untuk mengutamakan penggunaan pemacu yang serasi dengan JDBC 4.2 dan ke atas untuk memudahkan kod dan meningkatkan kecekapan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan dan mendapatkan semula objek Java `java.time` dengan cekap ke dalam dan dari pangkalan data Postgres atau H2 menggunakan JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan