我正在执行Statement查询并将数据存储在ResultSet rs。
中// if no record is returned by the query
if (!rs.next() ) {
Step1
}
// if atleast one record is returned by the query
if(rs.next()){
do {
if (rs.getString(1).equalsIgnoreCase("0")){
Step2
}
if (rs.getString(1).equalsIgnoreCase("1")){
Step3
}
} while (rs.next());
}
但是,如果我从查询中只获取一条记录,则不会执行任何步骤。如果有人能够指出错误,那将是非常有帮助的。
答案 0 :(得分:5)
您必须了解next()
方法究竟是做什么的。 next()将光标移动到下一个元素。如果条件通过,则在next()
内部写入while
时没有更多元素。
为什么不通过执行
来简化代码while ( rs.next() ) {
if (rs.getString(1).equalsIgnoreCase("0")){
Step2
}
if (rs.getString(1).equalsIgnoreCase("1")){
Step3
}
}
如果您进入while循环,则有项目,否则为No.
答案 1 :(得分:3)
您总是跳过第一个元素,因为您在获取元素之前调用.next()
两次。
尝试做这样的事情:
if (rs.next()) {
// At least one record returned
do {
if (rs.getString(1).equalsIgnoreCase("0")) {
// Step2
}
if (rs.getString(1).equalsIgnoreCase("1")) {
// Step3
}
} while (rs.next());
} else {
// No records returned
}
答案 2 :(得分:2)
来自JavaDoc ResultSet:
将光标从当前位置向前移动一行。 ResultSet游标最初位于第一行之前;对方法的第一次调用使得第一行成为当前行;第二个调用使第二行成为当前行,依此类推。
在您的代码中,您不需要第二次调用rs.next()
,因为游标已经在第一行。
答案 3 :(得分:2)
最初rs
包含一条记录或更准确地指向具有一条记录的结果集。
现在当if(!rs.next())
被调用时,rs会移动到结果集中的下一条记录,而不存在,因为您只有一条记录。所以如果顺利的话。但是,当您使用if(rs.next())
时,rs
再也没有任何记录,因此if
不会执行。
答案 4 :(得分:2)
您不应该两次调用rs.next()
方法。以下逻辑应该有效:
if (!rs.next() ) {
Step1
}
else{ // if atleast one record is returned by the query
do {
if (rs.getString(1).equalsIgnoreCase("0")){
Step2
}
if (rs.getString(1).equalsIgnoreCase("1")){
Step3
}
}while (rs.next());
}