【发布时间】:2010-09-25 03:07:01
【问题描述】:
我正在运行 tomcat 并且有一些显示表格子集的 jsp 页面。我在单个页面上一次显示 20 行。当表格有大量数据时,jsp页面不呈现。我猜 ResultSet 正在使用客户端游标。我过去使用过 ASP,我们总是使用服务器端仅向前游标,并且在处理大量数据时从未遇到任何问题。我们的数据库是 oracle 10g。
如何在 JDBC 中指定服务器端只进游标?
【问题讨论】:
我正在运行 tomcat 并且有一些显示表格子集的 jsp 页面。我在单个页面上一次显示 20 行。当表格有大量数据时,jsp页面不呈现。我猜 ResultSet 正在使用客户端游标。我过去使用过 ASP,我们总是使用服务器端仅向前游标,并且在处理大量数据时从未遇到任何问题。我们的数据库是 oracle 10g。
如何在 JDBC 中指定服务器端只进游标?
【问题讨论】:
Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY);
ResultSet rs = stmt.executeQuery(sql);
这应该设置它,但显然一些驱动程序会忽略它。
您总是可以尝试在 ResultSet 级别重新设置它。
rs.setFetchDirection(ResultSet.TYPE_FORWARD_ONLY);
希望对您有所帮助。
【讨论】:
oracle 驱动程序通过 FetchSize 属性实现服务器端游标。
不幸的是,JDBC 并没有明确地允许设置客户端游标和服务器端游标,因此不同的驱动程序以不同的方式实现它。以下是其他有帮助的链接:
【讨论】:
没有完全回答这个问题,但您是否考虑过在 WHERE 子句中使用 ROWNUM 或 ROWNUMBER 将分页显式添加到 SELECT 查询?
eg:对于第二页数据,20元素页面大小:
SELECT *
FROM MyDataObjects
WHERE rownum > 20 AND rownum < 41
这将确保最多返回一页记录,消除大游标问题。
【讨论】: