我们正在尝试使用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);
这也有效。现在我们不确定延迟是从池中获取连接还是像我们之前想象的那样完成先前的事务。
答案 0 :(得分:0)
如果您的查询从物化视图中进行选择,那么在产生结果之前可能会有一些经过的时间(因为物化视图在提交后不一定立即刷新,具体取决于它们是如何创建的)。
如果是这种情况,那么您可以通过直接从基表中选择(或等效的非物化视图)或强制实体化视图进行刷新来解决问题。