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 サイトの他の関連記事を参照してください。