ResultSet 没有正确定位,可能需要在 java 中调用 next

Posted

技术标签:

【中文标题】ResultSet 没有正确定位,可能需要在 java 中调用 next【英文标题】:ResultSet not positioned properly, perhaps you need to call next in java 【发布时间】:2014-05-31 07:51:10 【问题描述】:

ResultSet 定位不正确,当我尝试执行以下代码时,您可能需要在 java 中调用 next 错误。请任何人帮助我

PreparedStatement m_inoutid = null;
 docno="[101,102,103,104]";
 String minoutid[]=new String[1000];
 String documentno = docno.substring(1, docno.length() - 1);
 List<String> docnumbers = new ArrayList<String>();
 String[] split = documentno.split(",");
 StringBuilder sb = new StringBuilder();
 for (int i = 0; i < split.length; i++) 

  String sql = "select id from mytable where fid=?";

   outid = conn.prepareStatement(sql);
   String  idfromquery=split[i];
    outid.setString(1, idfromquery);
    ResultSet idResultSet = outid.executeQuery();
    idResultSet.next();

    id = idResultSet.getString("id");

   final List<Object> parameters = new ArrayList<Object>();
   parameters.add(null);
   parameters.add(id);

   myfunction(parameters);
    

【问题讨论】:

包含代码会很有帮助,但如果您显示错误消息的确切文本(包括堆栈跟踪),那就太好了。您的代码看起来也奇怪地缩进了。最后,您真的不应该在这样的循环中执行 SQL - 只需执行单个 SELECT 并使用适当的 WHERE 子句查找所有 1000 个结果(加入 VALUES 列表或临时表,... ) 【参考方案1】:

代码应该是这样的(在 Java 7 或更高版本中):

String docno = "[101,102,103,104]";
String[] minoutid = new String[1000];
String documentno = docno.substring(1, docno.length() - 1);
String[] split = documentno.split(",");

String sql = "select id from mytable where fid=?";
try (PreparedStatement outid = conn.prepareStatement(sql)) 
    for (int i = 0; i < split.length; i++) 
        int fid = Integer.parseInt(split[i]);
        outid.setInt(1, fid);
        try (ResultSet idResultSet = outid.executeQuery()) 
            if (idResultSet.next()) 
                String id = idResultSet.getString("id");
                final List<Object> parameters = new ArrayList<>();
                parameters.add(null);
                parameters.add(id);

                myfunction(parameters);
            
              
    

这将关闭准备好的语句和结果集。我也使用了setInt 而不是setString(可能是错误的)。但这可能会导致错误,否则一切都会起作用。如果这没有帮助,请给出错误。

【讨论】:

感谢您的帮助..我发现哪里出错了..我发现了问题。当我用''分割字符串时,它会从第二个字符串中添加空格。我使用 trim() 来消除这些空间。现在工作正常...【参考方案2】:

从第二个字符串开始,每个字符串中都添加了一个空格。我正在使用 POSTGREYSQL,因此每个空格都会将其作为字符串。所以我通过修剪()消除了字符串的空间。现在工作正常。谢谢大家

【讨论】:

以上是关于ResultSet 没有正确定位,可能需要在 java 中调用 next的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用带有 h:dataTable 的 ResultSet

ResultSet 与 RowSet:选择哪一个以及何时选择?

在 Java 中处理 ResultSet 的有效方法

从带有空格的 ResultSet 中获取字符串

是否所有死锁都是由错误查询引起的

ResultSet getDate() 返回不正确和正确的日期