4

私は著者のテーブルを持っています:authorID、authorName。authorID は自動増分の pk です。

ユーザーから名前を取得してテーブルに追加するメソッドをJavaで書きたいと思います。ただし、著者のIDを返す必要があります。1つのSQL文でそれを行う方法はありますか?

たとえば、私のコードにコマンドがある場合:

stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");

string.get(1) は著者名です。

今私が書くと:

ResultSet rs =stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");

rsは結果セットですが、返される値はintであるため、エラーが表示されます。これは、挿入した行の int pk ですか?

4

5 に答える 5

8

試す

stmt.executeUpdate("INSERT INTO authors VALUES (, '"+ string.get(1) +"')", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
long pk = rs.getLong(1);
于 2013-01-09T11:37:07.547 に答える
5

作成中にStatement.RETURN_GENERATED_KEYSを渡しますPreparedStatement conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

PreparedStatement#getGeneratedKeys()inert の後に自動生成されたキーを 返します。

于 2013-01-09T11:36:25.973 に答える
5

最後に挿入された ID を取得するには、次のコードを参照してください。

PreparedStatement stmnt = Conn.preparedStatement("INSERT INTO authors(col1) VALUES (?)", Statement. RETURN_GENERATED_KEYS );
stmnt.setString(col1val);
stmnt.executeUpdate();
ResultSet rs=stmnt.getGeneratedKeys();
if(rs.next()){
   System.out.println(rs.getInt(1));
}
于 2013-01-09T11:37:24.193 に答える
0

試す:

INSERT INTO authors VALUES (...) returning authorID

実行するときは、を使用して実行しますexecuteQueryResultSet1行1列のaを取得する必要があります—これがIDになります。

于 2013-01-09T11:32:51.940 に答える
0

これが JDBC でサポートされているかどうかはわかりません (しばらく使用していません)。

INSERT INTO TABLE_NAME (FIELD1, FIELD2) VALUES ('foo', 'bar') RETURNING FIELD3

executeQuery() を使用するか、jdbc ドライバーが RETURNING単純なストアド関数の作成をサポートしていない場合。

どの RDMBS を使用していますか?

于 2013-01-09T11:35:15.033 に答える