ホームページ > データベース > mysql チュートリアル > JDBC で挿入 ID を効率的に取得するにはどうすればよいですか?

JDBC で挿入 ID を効率的に取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-23 18:48:11
オリジナル
832 人が閲覧しました

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 ドライバーのサポートにかかっています。 MySQL、DB2、PostgreSQL など、ほとんどの最新の JDBC ドライバーがこの機能をサポートしています。ただし、Oracle JDBC ドライバーには、この領域で依然として制限がある可能性があります。

Oracle の代替手段

Oracle の場合は、CallableStatement または RETURNING 句を指定した SELECT クエリを使用して、最後に生成されたキーを取得することを検討してください。

<code class="language-sql">"{? = call INSERT_FUNCTION(?, ?, ?)}"</code>
ログイン後にコピー

プレースホルダー ? は、挿入 ID を保持する変数を表します。

以上がJDBC で挿入 ID を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート