1. ホーム
  2. java

[解決済み] MySQL & Java - 最後に挿入された値のIDを取得する (JDBC) [重複].

2023-01-14 01:40:35

質問

重複の可能性があります。

どのようにJDBCで挿入IDを取得するには?

こんにちは、私はJavaを介してデータベースに接続するためにJDBCを使用しています。

さて、私はいくつかの挿入クエリを実行し、私は最後に挿入された値のidを取得する必要があります(したがって、後に stmt.executeUpdate ).

のようなものは必要ない。 SELECT id FROM table ORDER BY id DESC LIMIT 1 のようなものは必要ありません。

私はただ、最後の挿入に関連するidを取得する必要があります(ステートメントの私のインスタンスについて)。

私はこれを試しましたが、それはJDBCで動作しないようです。

public Integer insertQueryGetId(String query) {
    Integer numero=0;
    Integer risultato=-1;
    try {
        Statement stmt = db.createStatement();
        numero = stmt.executeUpdate(query);

        ResultSet rs = stmt.getGeneratedKeys();
        if (rs.next()){
            risultato=rs.getInt(1);
        }
        rs.close();

        stmt.close();
    } catch (Exception e) {
        e.printStackTrace();
        errore = e.getMessage();
        risultato=-1;
    }
  return risultato;
}

実際には、毎回 risultato = -1 と表示され java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

どのように私はこの問題を修正することができますか?ありがとうスタックオーバーフローの人々 :)

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

変更するだけでは?

numero = stmt.executeUpdate(query);

になります。

numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);

JDBCのドキュメントを見てみましょう。 Statement インターフェースのドキュメントを見てください。

アップデート : どうやらこの回答について多くの混乱があるようですが、私の推測では、混乱している人々は、質問された文脈でそれを読んでいないのだと思います。OP が彼の質問で提供したコードを、私が提案している 1 行 (6 行目) に置き換えれば、すべてが動作します。その numero 変数はまったく無関係で、その値が設定された後は決して読み込まれません。