【问题标题】:I don't get into a loop even though the ResultSet is full即使 ResultSet 已满,我也不会进入循环
【发布时间】:2020-08-14 12:42:40
【问题描述】:

我有一个不为空的结果集。它包含 6 列。但是如果我想使用循环,什么都不会发生。

如果我在 SQL Server Management Studio 中使用与 Java 代码中相同的参数调用存储过程,我会得到一个结果:

几分钟前一切正常

// That doesn't work because I can't get into the loop
if (con != null) {
        String an_id = "bkoubik";
        String AS_Aufruf = "exec BfV_Web.sp_Anwender_Start\n@AnwenderID = ?";

        try {
            PreparedStatement STMT = con.prepareStatement(AS_Aufruf);
            
            STMT.setString(1, an_id);

            ResultSet rs = STMT.executeQuery();
            
            //THIS IF STATEMENT IS NOT ENTERING, SO WHY THEN THE WHILE LOOP 
              IS NOT WORKING ?
            if (!rs.next() ) {
                System.out.println("no data");
            } 
    
            ResultSetMetaData meta = rs.getMetaData();
            int intRS = meta.getColumnCount();

            //THE LOOP IS NOT ENTERING
            while (rs.next()) { 

              [...]
            }

【问题讨论】:

  • 您是否尝试在 while 循环之前、内部和之后添加一个简单的打印语句?
  • 请阅读“如何创建minimal reproducible example”。然后使用edit 链接改进您的问题(不要通过 cmets 添加更多信息)。您的代码也很重要。并提示:不要使用图像。而是:使用打印语句将相关信息打印为文本,并将其放入您的问题中。作为格式良好的文本。
  • rs.next() 迭代,而不是。而且您似乎在掩盖您的代码可能在做什么。
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 请不要在您的问题中包含图片,因为文字会更好或更好。

标签: java


【解决方案1】:

intRS 是列数,而不是行数。你的 rs 可能是空的。

【讨论】:

    【解决方案2】:

    rs.next() 的第一次调用(在循环之前)已经消耗了唯一一行,因此下一次调用(在while 中)将返回 false。

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 2013-04-08
      • 2021-08-07
      相关资源
      最近更新 更多