0


1

JDBC、MySQL:PreparedStatementから行データを取り戻す実行

私は以下の設定を使用しています。

public MySQLProcessWriter(Connection con) throws SQLException {
 String returnNames[] = {"processId","length","vertices"};
 addresser = con.prepareStatement("INSERT INTO addressbook (length, vertices, activity) VALUES (?, ?, ?)", returnNames);
}

「processId」は、アドレス帳テーブルの自動インクリメント列に対応します。 だから、アイデアは:私は繰り返し挿入をしている、私は自動生成されたprocessIdを挿入したもののいくつかを取り戻す。 しかし、準備済みステートメントの実行後(適切な値の設定後)に `addresser.getGeneratedKeys()。getInt(" processId ");`を実行しようとすると、「カラムが見つかりません」というSQLExceptionが発生します。 そのためのコードは

addresser.setInt(1, length);
addresser.setInt(2, vertices);
addresser.setDouble(3, activity);
addresser.executeUpdate();
int processId = addresser.getGeneratedKeys().getInt("processId");

長さ、頂点、アクティビティを更新しているループ内。 それで…何ができる? prepareStatement(sqlstring、string [])メソッドの動作を誤解していませんか?

2 Answer


2


返された結果セットに対してnext()を呼び出す必要があると思います

ResultSet keys = addresser.getGeneratedKeys(); int processId = -1; if(keys.next()){processId = keys.getInt( "processId"); }


0


getInt()`を呼び出す前に、 `getGeneratedKeys()`から返された `ResultSet`に対して next() `メソッドを呼び出す必要があります

ResultSet rs = addresser.getGeneratedKeys();
int processId = 0;
if (rs.next()) {
  processId = rs.getInt("processId");
}