有关ResultSet的查询

时间:2017-02-14 09:07:19

标签: java jdbc resultset

我正在执行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());
}

但是,如果我从查询中只获取一条记录,则不会执行任何步骤。如果有人能够指出错误,那将是非常有帮助的。

5 个答案:

答案 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());
    }