Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan ID Sisipan dengan Cekap dalam JDBC?

Bagaimana untuk Mendapatkan ID Sisipan dengan Cekap dalam JDBC?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-23 18:48:11834semak imbas

How to Efficiently Retrieve the Insert ID in JDBC?

Dapatkan ID sisipan dalam JDBC dengan cekap

Apabila memasukkan data ke dalam jadual pangkalan data menggunakan JDBC, anda selalunya perlu mendapatkan kunci yang dijana (atau ID sisipan), yang mengenal pasti rekod yang baru ditambah. JDBC menyediakan mekanisme untuk mendapatkan ID ini dengan cekap.

Gunakan Pernyataan#getGeneratedKeys()

Untuk kunci yang dijana secara automatik, JDBC menyediakan kaedah Statement#getGeneratedKeys(). Kaedah ini dipanggil pada pernyataan yang sama yang menjalankan operasi INSERT. Untuk membolehkan penjanaan kunci, pernyataan mesti dibuat dengan bendera Statement.RETURN_GENERATED_KEYS.

<code class="language-java">public void create(User user) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT,
                                      Statement.RETURN_GENERATED_KEYS);
    ) {
        statement.setString(1, user.getName());
        statement.setString(2, user.getPassword());
        statement.setString(3, user.getEmail());
        // ...

        int affectedRows = statement.executeUpdate();

        if (affectedRows == 0) {
            throw new SQLException("创建用户失败,没有影响行。");
        }

        try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
            if (generatedKeys.next()) {
                user.setId(generatedKeys.getLong(1));
            }
            else {
                throw new SQLException("创建用户失败,未获得 ID。");
            }
        }
    }
}</code>

Keserasian Pemandu

Kejayaan pendekatan ini bergantung pada sokongan pemandu JDBC. Kebanyakan pemacu JDBC moden menyokong ciri ini, termasuk MySQL, DB2, dan PostgreSQL. Walau bagaimanapun, pemandu Oracle JDBC mungkin masih mempunyai had dalam bidang ini.

Alternatif Oracle

Untuk Oracle, pertimbangkan untuk menggunakan CallableStatement atau pertanyaan PILIH dengan klausa RETURNING untuk mendapatkan kunci yang dijana terakhir.

<code class="language-sql">"{? = call INSERT_FUNCTION(?, ?, ?)}"</code>

Pemegang tempat ? mewakili pembolehubah yang memegang ID sisipan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan ID Sisipan dengan Cekap dalam JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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