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