JDBC 中高效取得插入 ID
在使用 JDBC 向資料庫表中插入資料時,通常需要取得產生的鍵(或插入 ID),它標識新新增的記錄。 JDBC 提供了高效率檢索此 ID 的機制。
使用 Statement#getGeneratedKeys()
對於自動產生的鍵,JDBC 提供了 Statement#getGeneratedKeys()
方法。此方法在執行 INSERT 操作的相同語句上呼叫。若要啟用鍵的生成,必須使用 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>
驅動程式相容性
這種方法的成功取決於 JDBC 驅動程式的支援。大多數現代 JDBC 驅動程式都支援此功能,包括 MySQL、DB2 和 PostgreSQL。但是,Oracle JDBC 驅動程式在這方面可能仍然存在限制。
Oracle 的替代方法
對於 Oracle,請考慮使用具有 RETURNING 子句的 CallableStatement
或 SELECT 查詢來檢索最後產生的鍵。
<code class="language-sql">"{? = call INSERT_FUNCTION(?, ?, ?)}"</code>
佔位符 ?
代表儲存插入 ID 的變數。
以上是JDBC中如何有效率地檢索插入ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!