0

我们正在尝试使用 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);

这也有效。现在我们不确定延迟是从池中获取连接还是像我们之前想象的那样完成先前的事务。

4

1 回答 1

0

如果您的查询是从物化视图中选择的,那么在它产生结果之前可能需要一些时间(因为物化视图不一定会在提交后立即刷新,具体取决于它们的创建方式)。

如果是这种情况,那么您可以通过直接从基表(或等效的非物化视图)中选择或强制物化视图刷新来解决问题。

于 2013-05-09T21:58:31.713 回答