PreparedStatement.setFetchDirection(ResultSet.FETCH_FORWARD)
是否会对Oracle数据库产生影响?
我正在为一家大型电力公司的电力设施和线路维护系统升级数据库和应用服务器。我们正在测试新的设置(Oracle 12c和JBoss 7)。
有时对数据库的查询需要几分钟才能得到答案。我建议做PreparedStatement.setFetchSize(int rows)
,其中行是用户想要在屏幕上看到的信息行数。 Stackoverflow和其他地方的许多海报都说setFetchSize()
对于优化网络连接非常重要。
但我注意到PreparedStatement
也有setFetchDirection()
。有FETCH_FORWARD
,FETCH_REVERSE
和FETCH_UNKNOWN
。我已经多次看过这个,但我没有看到有人说这有多大的好处。
如果有助于了解情况 - 电力公司为3000万客户提供服务,拥有数十年的记录(从核电站到电线杆)。该服务的用户将是维护人员,办公室工作人员,来自公司和分包商。因此,用户的计算机技能和耐心可能无法忍受3分钟的等待,以找到他们需要修理的变压器的位置。
答案 0 :(得分:0)
Oracle说
“JDBC 2.0标准允许预先指定 方向,称为获取方向,用于处理a 结果集。这允许JDBC驱动程序优化其处理。“
但Oracle也说“Oracle JDBC驱动程序仅支持前向预置值”ResultSet.FETCH_FORWARD
“值ResultSet.FETCH_REVERSE和ResultSet.FETCH_UNKNOWN是 不支持。“
所以,我的猜测是,如果您使用的是JDBC 2.0标准驱动程序,那么您可以在想要查找过期维护工作时通过说setFetchDirection(ResultSet.FETCH_REVERSE)来优化获取。但是,如果您使用的是Oracle JDBC驱动程序,则运气不佳。
(如果我错了,请向我发誓 - 我知道这会改善你的极客信条。)