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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-23 18:48:11787瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn