到目前为止,我一直在使用这样的查询我的数据库工作得非常好:
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,这可能是应用程序服务器运行您的应用程序所需的大部分内存.