1. ホーム
  2. java

[解決済み] PreparedStatementとStatement.RETURN_GENERATED_KEYSについて

2023-05-22 05:38:31

質問

いくつかの JDBC ドライバで Statement.RETURN_GENERATED_KEYS を返す唯一の方法は、次のようなものです。

long key = -1L;
Statement statement = connection.createStatement();
statement.executeUpdate(YOUR_SQL_HERE, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = statement.getGeneratedKeys();
if (rs != null && rs.next()) {
    key = rs.getLong(1);
}

と同じことをする方法はありますか? PreparedStatement ?


編集

で同じことができるかと聞いたのは PreparedStatement は、次のようなシナリオを考えてみましょう。

private static final String SQL_CREATE = 
            "INSERT INTO
            USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB) 
            VALUES (?, ?, ?, ?, ?)";

の中で USER テーブルには PRIMARY KEY (USER_ID) であり、これは BIGINT AUTOINCREMENT (に表示されないのは、そのためです)。 SQL_CREATE 文字列です。

さて、私が入力した ? を使って PreparedStatement.setXXXX(index, value) . を返したいのですが ResultSet rs = PreparedStatement.getGeneratedKeys() . どうすれば実現できるのでしょうか?

どのように解決するのですか?

を使用することができます。 prepareStatement メソッドで、さらに int パラメータを取る

PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)

いくつかのJDBCドライバ(例えばOracle)では、生成されたキーのカラム名またはインデックスを明示的にリストアップする必要があります。

PreparedStatement ps = con.prepareStatement(sql, new String[]{"USER_ID"})