我试图返回结果集的一些方法。我确定我的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;不打印。这是什么原因?我的退货声明有什么问题吗?
答案 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();
}