【问题标题】:Query regarding ResultSet关于 ResultSet 的查询
【发布时间】:2017-02-14 09:07:18
【问题描述】:

我正在执行语句查询并将数据存储在 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());
}

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

【问题讨论】:

  • 注意:if(condition) do{ } while(condition);,如果条件完全相同,则与while(condition){}相同,除非您使用else,在其中可以添加Step1

标签: java jdbc resultset


【解决方案1】:

您必须了解 next() 方法的确切作用。 next() 将光标移动到下一个元素。当你在里面写next()时,如果条件通过并且while没有更多元素。

你为什么不通过这样做来简化你的代码

while ( rs.next() ) { 
   if (rs.getString(1).equalsIgnoreCase("0")){
          Step2
  }

  if (rs.getString(1).equalsIgnoreCase("1")){
         Step3
 }
}

如果进入while循环,则有项目,否则没有。

【讨论】:

  • ResultSet 没有hasNext() 方法
  • 不,这是结果集中的isLast()
【解决方案2】:

你总是跳过第一个元素,因为你在获取一个元素之前调用了两次.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
}

【讨论】:

    【解决方案3】:

    来自 JavaDoc ResultSet:

    将光标从当前位置向前移动一行。 ResultSet 游标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。

    在您的代码中,您不需要第二次调用 rs.next(),因为光标已经在第一行。

    【讨论】:

      【解决方案4】:

      最初rs 包含一条记录或更精确地指向具有一条记录的结果集。

      现在当if(!rs.next()) 被调用时,rs 会移动到结果集中的下一条记录,因为您只有一条记录,所以该记录不存在。所以如果顺利的话。但是当你再次使用if(rs.next()) 时,rs 将不会有任何记录,因此if 将不会执行。

      【讨论】:

        【解决方案5】:

        你不应该调用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());
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-05
          • 2013-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多