多长时间处理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之间的区别
SQLException:executeQuery 方法不能用于更新
Can not issue data manipulation statements with executeQuery() 异常处理