【发布时间】:2019-11-08 05:51:15
【问题描述】:
我正在使用两个不同的查询从两个表中选择数据。我正在使用一个连接和一个结果集。两个表都已填充,但第二个查询的 resultset.next() 返回 false,尽管它必须为 true。
我还尝试使用两个不同的 PreparedStatements 和 Connections,但这些都不适合我。
DataSource ds = null;
Connection c = null;
PreparedStatement ps = null;
String sql = "SELECT * FROM TABLE1"
String sql2 = "SELECT * FROM TABLE2"
ds = // My datasource
c = ds.getConnection();
ps = c.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();
while (resultSet.next()) {
// do smth
// works
}
ps.close();
ps = c.prepareStatement(sql2);
resultSet = ps.executeQuery();
while (resultSet.next()) {
// do somth
// does not work although TABLE2 is populated
}
ps.close();
所以程序应该跳转到第二个while循环,因为查询sql2中有数据返回。你有什么建议吗?谢谢!
【问题讨论】:
-
你确定
table2确实有committed 数据吗?我推测您在另一个客户端的打开会话中创建并填充了两个表,没有任何明确的提交;并且table1仅出现是因为创建table2的 DDL 隐式提交。 -
是的,100% 确定.. :( 表仅由我选择而不是创建。SQL-Developer 中的相同查询正在返回数据...
-
显式关闭结果集是一种很好的做法,但不应导致这种影响;而且我无法使用您的代码进行复制。另一个 - 微不足道但令人惊讶的常见 - 要排除的错误是,您实际上并没有以相同的用户身份连接,甚至没有连接到与 SQL Developer 相同的数据库,因此正在查看来自不同表的数据,而不是您预期的数据。特别是如果您发现单独的语句和连接存在相同的问题。
-
您的标题似乎与您的问题无关,因为您没有在一个结果集中使用多个语句。您正在重用
variables的事实并不意味着您正在重用对象。在任何情况下,您都需要提供minimal reproducible example。
标签: java oracle jdbc resultset