首頁 > 資料庫 > mysql教程 > JDBC中如何有效率地檢索插入ID?

JDBC中如何有效率地檢索插入ID?

Mary-Kate Olsen
發布: 2025-01-23 18:48:11
原創
786 人瀏覽過

How to Efficiently Retrieve the Insert ID in JDBC?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板