多长时间处理executeQuery() 方法?

Posted

技术标签:

【中文标题】多长时间处理executeQuery() 方法?【英文标题】:How long process executeQuery() method? 【发布时间】:2017-11-03 09:02:08 【问题描述】:

我在 Oracle 中有新的简单 SELECT 查询。

如果我在 SQL 工具上运行,则需要 1~3 秒。

但是在 java jdbc 上使用 executeQuery() 方法,需要 30~40 秒

为什么需要这么长时间?我认为如何解决这个问题?

请帮助新手

我只是上传我的 java 源代码 但无法查询上传 上传时间过长

    pstmt   =   con.prepareStatement(Query);
    pstmt.setString(1,  model.B_BasicDate);
    pstmt.setString(2,  GL_bfMonth);
    pstmt.setString(3,  GL_bfDay);
    **rs = new DmdResultSet(pstmt.executeQuery());  // it takes 35 seconds**
    int  colCount       =   rs.getColumnCount();
    Vector  innV        =   null;
    while(rs.next()) 
        innV        =   new Vector();
        for (int i = 1 ; i <= colCount; i++) 
            innV.addElement(rs.getString(i)) ;
        
        outV.addElement(innV);
    

【问题讨论】:

能否请您发布您想要执行的代码和 sql 查询。 :) @kitonlee 提供带有查询的代码 @kitonlee 编辑您的答案并在那里发布您的代码,评论部分不适合这样做 您要执行的 SQL 也会有帮助.. 还是所有语句都很慢? 所有 sql 查询在 java 上都很慢 【参考方案1】:

有一些螺丝像setFetchSize 和自动提交/事务模式。 但是首先尝试使用更多内存运行应用程序(java -Xmx=...), 因为你正在做大量的工作。

关于效率:

声明接近首次使用;循环内部不会改变 它的存储空间。 Vector 是一个非常古老的类。使用(数组)列表。它更快。 SELECT many fields 效率低下,尤其是对于 CLOB 等。

所以:

// The normal I use, but there are faster ones
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
connection.setReadOnly(true);

List<List<String>> outV = new ArrayList<>();
while (rs.next()) 
    List<String> innV = new ArrayList<>(colCount);
    for (int i = 1 ; i <= colCount; i++) 
        innV.add(rs.getString(i)) ;
    
    outV.add(innV);

顺便说一句,方法、变量和字段名应以小写字母开头,驼峰式,不带下划线。这是 java 家族的一个相当严格的约定。

【讨论】:

谢谢你的帮助,我会试试这个非常感谢

以上是关于多长时间处理executeQuery() 方法?的主要内容,如果未能解决你的问题,请参考以下文章

executeexecuteQuery和executeUpdate之间的区别

无法使用 executeQuery 发出数据操作语句

Atitit  jdbc 处理返回多个结果集

SQLException:executeQuery 方法不能用于更新

SQL 错误:executeQuery 方法必须返回结果集

Can not issue data manipulation statements with executeQuery() 异常处理