0

次のコードを実行しようとしています。接続は正常に構築されています。

String selectq = "select max(id) as max_id from items";
currentCon = (Connection) ConnectionManager.getConnection();
            stmt=(Statement) currentCon.createStatement();
ResultSet rSelect = stmt.executeQuery(selectq);

次のコマンドを実行すると、テーブルに行がなくても出力は1になります。

rSelect.next();
System.out.println(rSelect.getRow());

私の要件は、テーブルにレコードがないかどうかを確認することです。そうでない場合は、そのテーブルからid列の最大値を取得する必要があります。

私は次のような多くのことを試しました

rSelect.last();
rSelect.next();

しかし、私は必要な結果を得ることができません。

使ってます

  • Eclipse Indigo 3.7
  • JDK 1.6.0_37
  • Tomcat 7
  • MySQL
4

4 に答える 4

3

の結果を無視してはいけませんResultSet#next()false行がない場合に戻ります。また、最初の列をとして取得するにはint、を使用しResultSet#getInt()て、列インデックスまたは列ラベルを渡す必要があります。

if (resultSet.next()) {
    int max = resultSet.getInt("max_id");
} else {
    // There are no records. Set max to -1 or something?
}
于 2013-01-14T12:35:52.787 に答える
1

rSelect.getInt(1)の代わりに使用する必要がありrSelect.getRow()ます。

于 2013-01-14T12:32:31.127 に答える
1

次のようにResultSetを使用します。

while (resultSet.next()) {
  //do something with this row, e.g:
  int id = resultSet.getInt(1);
  //...
}

whileループは、すべての行を繰り返し処理します。

于 2013-01-14T12:38:35.353 に答える
0

以下のようなIfステートメントを追加した後に機能しました。

String id = "";


if(rSelect.next()){
    id = rSelect.getString(1);
}

なぜなら、私の質問によれば、存在できるのは1行だけか、何もないからです。

于 2013-01-14T12:53:49.310 に答える