// 我正在使用它来检查结果“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
}
如果您的结果集为空 zoeken.next()
将返回false在这种情况下您的 while 循环将不会执行。
一个建议
使用PreparedStatement而不是简单的 Statement。简单的语句会导致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");