gpt4 book ai didi

java - 为什么从方法返回时我的 ResultSet 变空?

转载 作者:行者123 更新时间:2023-11-29 10:32:32 54 4
gpt4 key购买 nike

我已将查询部分放在一个单独的函数中,该函数在一个地方处理 try、catch 和连接。最近我开始看到返回的结果集为空,但在方法内它不为空。这是传递结果集的不正确方式吗?

public synchronized ResultSet executeQry(String query) {
try {
Connection conn = DriverManager.getConnection(myUrl, user, pass);
Class.forName(myDriver);
Statement st = conn.prepareStatement(query);
System.out.println("executing query: " + query);
ResultSet rs = st.executeQuery(query);
System.out.println("result set is empty?" + resultSetEmpty(rs));
return rs;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}

我像这样调用这个方法

ResultSet tableDataRS =executeQry("SELECT * FROM dummy_table");
System.out.println("tableData为空?:"+resultSetEmpty(tableDataRS));

运行时,日志显示在executeQry中结果集不为空,但返回后结果集为空

执行查询:SELECT * FROM dummy_table
结果集为空? false
tableDataRS 为空? :true

最佳答案

感谢评论,我发现了问题。我将光标从结果集内容开始之前移动,以检查方法“resultSetEmpty()”中它是否为空,因此当我后来实际尝试使用它时,它已经指向结束所以没有内容可以使用。可以通过将“beforeFirst()”添加到结果集中来修复此问题。这是使用方法调用编辑的方法,将光标移动到第一条记录之前。

public Boolean resultSetEmpty(ResultSet rs) {
boolean isEmpty = true;
try {
while (rs.next()) {
isEmpty = false;
rs.beforeFirst();
break;
}
} catch (SQLException e) {
e.printStackTrace();
}
return isEmpty;
}

关于java - 为什么从方法返回时我的 ResultSet 变空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124901/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com