微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – ResultSet的Oracle JDBC性能

到目前为止,我一直在使用这样的查询我的数据库工作得非常好:
PreparedStatement prepStmt = dbCon.prepareStatement(MysqL);
ResultSet rs = prepStmt.executeQuery();

但后来我需要使用rs.first();为了能够多次迭代我的rs.所以我现在用

PreparedStatement prepStmt = dbCon.prepareStatement(MysqL,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

我的问题与两者的表现有关.如果我使用第二种选择,我会失去什么?使用第二个选项会对我到目前为止编写的代码产生任何负面影响吗?

PS:请注意,我的应用程序是一个使用后端Oracle 11g数据库的多用户,数据库密集型Web应用程序(在Weblogic 10.3.4上).

谢谢大家的关注.

UPDATE

我的最大重新设置大小将小于1000行和15-20列

解决方法

由于Oracle游标是仅向前结构,为了模拟可滚动游标,JDBC驱动程序通常需要将结果缓存在内存中,如果它希望能够确保在迭代时返回相同的结果结果第二次.根据查询返回的结果的数量和大小,可能涉及应用程序服务器上消耗的大量额外内存.另一方面,这应该意味着第二次迭代ResultSet应该比第一次更有效.

所需的额外内存是否有意义取决于您的应用程序.你说最大的ResultSet将有1000行.如果你认为每行是500字节(这显然取决于数据类型 – 如果你的ResultSet只有一堆数字,它会小得多,如果它包含一堆长描述字符串,它可能会大得多),1000行是每用户500 kb.如果您有1000个并发用户,那么只有500 MB的存储空间可能并不令人望而却步.如果你有100万个并发用户,另一方面,这是500 GB,这可能意味着你要购买一些新的服务器.如果您的行是5000字节而不是500,那么您所说的是5 GB的RAM,这可能是应用程序服务器运行您的应用程序所需的大部分内存.

原文地址:https://www.jb51.cc/java/127740.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐