我们正在尝试使用 PreparedStatement 从 Oracle DB 中获取数据。当从 PL/SQL 开发人员运行时,它会在相同的运行和获取数据时不断获取零记录。
我们在尝试调试时找到了根本原因。在调试代码时,正确地获取了两条记录。
我们通过放置这段代码进行了临时修复。
ResultSet rs = ps.executeQuery();
while(!rs.hasNext()){
ps.executeQuery();}
这行得通。但这不是最好的解决方案,因为它会导致不必要的数据库命中。它显然看起来像一个时间问题。我们还显式提交了早期事务,因为它们会影响此查询的结果。
这可能是什么原因造成的。解决这个问题的最佳方法是什么?
方法很大:我这里只贴一些部分:
private static boolean loadCommission(Member member){
Connection conn = getConnection("schema1"); //obtained through connection pool
//insertion into table
conn.close();
Conn conn2 = getConnection("schema2"); //obtained through connection pool
PreparedStatement ps = conn2.prepareStatement(sql);
//this sql combines data from schema1
// and 2 with DB links
ResultSet rs = ps.executeQuery();
//business logic
conn2.close();
return true;
}
谢谢
昨天我们又尝试了一些东西。我们将第二个连接代码替换为直接 jdbc 连接,如下所示
Connection conn = DriverManager.getConnection(URL, USER, PASS);
这也有效。现在我们不确定延迟是从池中获取连接还是像我们之前想象的那样完成先前的事务。