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!