// 結果 "zoeken" が空かどうかを確認するためにこれを使用していますが、それを行うことは違法であるという例外がスローされます。それが機能するかどうかに関係なく
ResultSet.next()を呼び出す前にResultSet.getRow () を呼び出さないでください。
API から:
ResultSet オブジェクトは、現在のデータ行を指すカーソルを維持します。最初、カーソルは最初の行の前に配置されます。next メソッドはカーソルを次の行に移動し、ResultSet オブジェクトに行がなくなると false を返すため、while ループで使用して結果セットを反復処理できます。
ResultSet zoeken = stat.executeQuery("SELECT * FROM leden WHERE naam = '" + text + "'");
boolean val = zoeken.next(); //next() returns false if there are no-rows retrieved
if(val==false){
System.out.println("zoken is empty"); //prints this message if your resultset is empty
}
while(val){// only runs when there are rows in the resultset
System.out.println(zoeken.getString(1) + zoeken.getString(2) + zoeken.getString(3));
val=zoeken.next(); //updating val again to check if there are rows in result set
}
結果セットが空の場合、 falsezoeken.next()
が返されます。その場合、while ループは実行されません。
アドバイス
単純なステートメントの代わりにPreparedStatementを使用します。単純なステートメントはSQL インジェクションにつながり、複雑なクエリを記述する手間も軽減されます。以下は、PreparedStatement を使用するサンプル コードです。
String yourquery ="Select whatever From table where col1= ? and col2 =?"
PreparedStatement stmnt = Conn.preparedStatement(yourquery);
stmnt.setString(1, "val1");
stmnt.setString(2, "val2");