5

ResultSetを繰り返すにはどうすればよいですか?次のコードを試してみましたが、エラーjava.sql.SQLException:空の結果セットに対する不正な操作が発生します。

 while ( !rs.isLast()) {
     rs.next();
     int id = rs.getInt("person_id");
     SQL.getInstance().getSt().execute("INSERT ref_person_pub(person_id) VALUES(" + id + ")");
}

更新:問題が見つかりました。SQLシングルトンのステートメントを1つだけ使用しました。ステートメントが閉じられると、それを再び使用することはできません。

4

2 に答える 2

11

JDBCチュートリアルによると:

resultSet = statement.executeQuery();
while (resultSet.next()) { 
    int id = resultSet.getInt("id");
    // ...
}

ResultSet#next()カーソルを現在の位置から1行前方に移動しtrue、新しい現在の行が有効な場合は戻ります。したがって、while行がなくなるとループは自動的に停止します。

複数の行ではなく0行または1行を返すことになっている場合は、if代わりに次を使用します。

resultSet = statement.executeQuery();
if (resultSet.next()) { 
    int id = resultSet.getInt("id");
    // ...
}

このようにして、を追加する機会がありelseます。

更新しますが、実際の問題とは関係ありませんが、コードに潜在的な問題が多く見られます。まず、相互に依存している複数のクエリを実行しているようです。これはより効率的に行うことができます。SQL結合に精通していますか?次に、JDBCリソースをリークしていませんか?ステートメントを取得しているように見えますが、使用後に適切に閉じることができるように、ステートメントのハンドルを取得していません。JDBCコードを適切に操作する方法の基本的な説明については、以前にリンクされたJDBCチュートリアルを参照してください。また、JDBCを適切に使用する方法のいくつかの基本的なキックオフの例については、この記事を参照してください。そうしないと、DBがリソースを使い果たしたときに、遅かれ早かれアプリケーションがクラッシュする可能性があります。

于 2010-03-30T13:32:05.283 に答える
2
while(rs.next()) {
   // iterate
}
于 2010-03-30T13:31:30.777 に答える