sql结果集的原因是什么不能返回结果集?

时间:2014-11-27 10:39:38

标签: java mysql sql return return-type

我试图返回结果集的一些方法。我确定我的sql查询输出了一些结果集。因为在" while(rs.next())"方法我打印值。但问题是当我返回结果集值并尝试调用" while(rs.next())"在调用方法中,不打印任何值。这是什么原因?

/ *通话方法* /

    public void corpusRetriveDemo(){
    ArrayList<String> wordAll= new ArrayList<String>();
            /* Get all word list For corpus Retrive */
    wordAll=allWordsList(sentence1);
    ResultSet rsNew=corpusSentenceRetrive(wordAll);


    try {
        while (rsNew.next()) {
            System.out.println("Heloooo2...");
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    /* uni Gram calculate */

    double d1=calculateProbUniGram(wordAll,rsNew);
    System.out.println(d1);

}

/ *数据库检索方法* /

    public ResultSet corpusSentenceRetrive(List wordList) {
    PreparedStatement pstmtFGram = null;
    Connection conn = null;
    ResultSet rs2 = null;
    StringBuilder sb = new StringBuilder();
    try {
        conn = getConnection();
        sb.append("SELECT Cor_Sentence FROM corpus Where ");
             for(int k=0;k<wordList.size();k++){
                 sb.append( " Cor_Sentence like '%" + wordList.get(k) + "%' OR ");
             } 
                 sb.append(" 1=0"); 
                 pstmtFGram = conn.prepareStatement(sb.toString());

            rs2 = pstmtFGram.executeQuery();
            while (rs2.next()) {
                System.out.println("Heloo1...");
            }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return rs2;

}

&#34; Heloo1&#34;正确打印。但是调用方法&#34; Helooo2&#34;不打印。这是什么原因?我的退货声明有什么问题吗?

3 个答案:

答案 0 :(得分:2)

删除

while (rs2.next()) {
      System.out.println("Heloo1...");
}

来自数据库检索方法。

您在两种情况下都使用相同的结果集,并且在您想要打印Hello2时已经到达它的末尾。

rsNew.next()在调用方法中没有任何进一步迭代的地方,因为它已经在数据库检索方法中结束了。

答案 1 :(得分:0)

在您的问题中,您将字符串附加到字符串构建器。

有一件事是。最后,最终的字符串变得像。

SELECT Cor_Sentence FROM corpus Where  Cor_Sentence like '%" + wordList.get(k) + "%' OR Cor_Sentence like '%" + wordList.get(k) + "%' OR

由于sql查询,它是一个例外。

您说 Helloo1 的另一种方式是打印。因此,请在代码中的下面一行注释并进行测试。

 while (rs2.next()) {
            System.out.println("Heloo1...");
                    }

答案 2 :(得分:0)

使用 RecordSet 时,正确的做法是:

rs.first();

do
{
  // do something here

} while (rs.next());

原因:迭代后设置它的位置是在set的末尾,从而使下一个方法返回false。首先将它定位在开头

可以更长时间地记录一次记录

似乎你永远不会关闭连接 conn ...请试试这个:

try {
    conn = getConnection();
    sb.append("SELECT Cor_Sentence FROM corpus Where ");
         for(int k=0;k<wordList.size();k++){
             sb.append( " Cor_Sentence like '%" + wordList.get(k) + "%' OR ");
         } 
             sb.append(" 1=0"); 
             pstmtFGram = conn.prepareStatement(sb.toString());

        rs2 = pstmtFGram.executeQuery();
        while (rs2.next()) {
            System.out.println("Heloo1...");
        }

} catch (Exception e) {
    e.printStackTrace();
}
finally
{
   if (conn != null) conn.close();
}