kre*_*jer 12 java postgresql jdbc cursor
我正在使用以下代码
st = connection.createStatement(
ResultSet.CONCUR_READ_ONLY,
ResultSet.FETCH_FORWARD,
ResultSet.TYPE_FORWARD_ONLY
);
st.setFetchSize(1000);
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query");
Run Code Online (Sandbox Code Playgroud)
查询返回大量(800k)行,并且在打印"开始查询"和"完成查询"之间需要很长时间(~2m).当我在查询中手动设置"限制10000"时,"开始"和"完成"之间没有时间.处理结果需要花费时间,所以我想如果它只是从数据库中获取1k行,处理这些行,并且当它用尽行时它可以在后台获得新行,则总体上更快.
结果集.CONCUR_READ_ONLY等我最后猜测的地方; 我错过了什么吗?
(这是一个postgresql 8.3服务器)
dog*_*ane 24
尝试关闭自动提交:
// make sure autocommit is off
connection.setAutoCommit(false);
st = connection.createStatement();
st.setFetchSize(1000);
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query");
Run Code Online (Sandbox Code Playgroud)
这将取决于您的司机。来自文档:
向 JDBC 驱动程序提供有关当需要更多行时应从数据库获取的行数的提示。指定的行数仅影响使用此语句创建的结果集。如果指定的值为零,则忽略提示。默认值为零。
请注意,它说的是“提示” - 我认为这意味着驾驶员可以忽略该提示(如果它确实愿意的话)......听起来这就是正在发生的事情。
| 归档时间: |
|
| 查看次数: |
15449 次 |
| 最近记录: |