JDBC中如何设置Cursor类型?

发布于 2024-07-09 03:46:00 字数 212 浏览 8 评论 0原文

我正在运行 tomcat 并有一些显示表子集的 jsp 页面。 我在一个页面上一次显示 20 行。 当表数据量较大时,jsp页面无法渲染。 我猜测 ResultSet 使用的是客户端游标。 我过去使用过 ASP,并且我们总是使用服务器端仅向前游标,并且在处理大量数据时从未遇到过任何问题。 我们的数据库是oracle 10g。

如何在 JDBC 中指定服务器端只进游标?

I'm running tomcat and have some jsp pages that display a subset of a table. I show 20 rows at a time on a single page. When the table has large amounts of data, the jsp page doesn't render. I'm guessing that the ResultSet is using a client side cursor. I've worked with ASP in the past, and we always used server side forward only cursors, and never had any problems with large amounts of data. Our database is oracle 10g.

How can I specify a server-side forward-only cursor in JDBC?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吃不饱 2024-07-16 03:46:00

oracle 驱动程序通过 FetchSize 属性实现服务器端游标。

不幸的是,JDBC 并没有明确允许设置客户端与服务器端游标,因此不同的驱动程序以不同的方式实现它。 以下是其他有帮助的链接:

获取大小
游标
Oracle 驱动程序

The oracle driver implements server-side cursors via the FetchSize property.

Unfortunately, JDBC doesn't explicitly allow for setting client vs server-side cursors, so different drivers implement it in different ways. Here are the other links that helped:

Fetch Size

Cursors

Oracle Driver

这个俗人 2024-07-16 03:46:00
Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY);
ResultSet rs = stmt.executeQuery(sql);

这应该设置它,但显然一些驱动程序会忽略它。

您始终可以尝试在结果集级别再次设置它。

rs.setFetchDirection(ResultSet.TYPE_FORWARD_ONLY);

希望有帮助。

Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY);
ResultSet rs = stmt.executeQuery(sql);

This should set it but apparently some drivers ignore it.

You could always try and set it again at ResultSet level.

rs.setFetchDirection(ResultSet.TYPE_FORWARD_ONLY);

Hope that helps.

扭转时空 2024-07-16 03:46:00

没有完全回答这个问题,但是您是否考虑过在 WHERE 子句中使用 ROWNUM 或 ROWNUMBER 显式地将分页添加到 SELECT 查询中?

例如:对于第二页数据,20 个元素页面大小:

SELECT * 
  FROM MyDataObjects
  WHERE rownum > 20 AND rownum < 41

这将确保最多返回一页记录,从而消除大游标问题。

Not quite answering the question, but have you considered explicitly adding paging to your SELECT query using ROWNUM or ROWNUMBER in your WHERE clause?

eg: for the second page of data, 20 element page size:

SELECT * 
  FROM MyDataObjects
  WHERE rownum > 20 AND rownum < 41

This would ensure that at most one page of records are returned, removing the large cursor issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文