ResultSet zoeken = stat.executeQuery("SELECT * FROM leden WHERE naam = '" + text + "'");
if (zoeken.getRow() == 0){
System.out.println("hi");
}
while( zoeken.next() ){
System.out.println(zoeken.getString(1) + zoeken.getString(2) + zoeken.getString(3));
}
我使用它来检查结果zoeken
是否为空,但它会抛出一个异常,说不管它是否有效都是非法的。
检查结果是否为空的更好的解决方案
答案 0 :(得分:9)
//我用它来检查结果“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");
答案 1 :(得分:2)
使用next()
方法
boolean hasNext = zoeken.next();
答案 2 :(得分:2)
以下代码适合您
if(!zoeken.first() && !zoeken.next())//if fist and next records are empty
{
System.out.println("Result set is empty");
}
else
{
System.out.println("Result set is not empty");
}
答案 3 :(得分:0)
根据next(),您必须首先使用next,然后使用getRow()
ResultSet zoeken = stat.executeQuery("SELECT * FROM leden WHERE naam = '" + text + "'");
while( zoeken.next() ){
int rowNum = zoeken.getRow();
System.out.println(zoeken.getString(1) + zoeken.getString(2) + zoeken.getString(3));
}
答案 4 :(得分:0)
不使用Result Set next(),您无法检查大小或resultSet周期。
ResultSet游标最初位于第一行之前。
答案 5 :(得分:0)
我知道OP可能不再需要这些信息,但是如果有人偶然发现这一点,我会同意@PermGenError所说的一切虽然,我觉得对于给定代码更优雅的解决方案但是使用预处理语句将是:
PreparedStatement ps = conn.prepareStatement("SELECT * FROM leden WHERE naam = ?");
ps.setString(title);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
do {
System.out.println(zoeken.getString(1) + zoeken.getString(2) + zoeken.getString(3));
} while (rs.next());
} else {
System.out.println("hi");
}
我写了这个写意,所以请原谅任何错误,或者如果不编译。我只是觉得这更清楚,减少了局部变量的使用。如果至少有一行,则打印该行并继续这样做,直到没有更多的行,否则说“hi”。但我想你会想说一些比“喜欢”更有用的东西,或许是“找不到结果”的消息或其他东西。