对于我正在处理的胖客户端项目,我必须远程连接到数据库(IBM i系列)并执行一些SQL相关任务:SQL新手 - 查询的组织和优化
Download/Update a set of local/offline 'control' data
- 此数据可能在未被注意的运行之间发生变化。- 这些表的名称是已知的,但模式名称在运行之间更改,并且可以更改运行间(据我所知,
PreparedStatements
不允许动态插入模式)。 我曾考虑过使用连接/联合/ etc来执行所有这些查询,但项目要求我在表数据(而不是一个大的连接块)之间进行内存分离。 Perform between 2 and 100+ repetitions of (2)
最后一个因素是,这需要在高延迟运行(潜在拨号)网络连接可能最古老的计算机上使用Java 1.5。
目前我运行15-20动态构建PreparedStatements
但我知道这是相当低效(我测量,以避免过早优化ala Knuth)。
什么是执行这些任务的最有效和最容错的方法?
我的想法:
- 关于
(1)
,我真的不知道比检查对新表整个表等,在这一点上,我觉得我还不如直接下载新的(潜在的和可能不变)表并替换旧的,但这需要更多时间。 - 对于
(2)
:理想情况下,我可以构建类似于SELECT
语句数组的东西,将它们一次全部发送,并让数据库每个内部查询返回一个ResultSet
。据我所知,Statement
和PreparedStatement
都不支持返回多个ResultSet
对象。 - 最后,我认为做
(3)
的最佳方式是批量操作(2)
。
您可以从运行Java代码在IBM我也可以这样做,并给你一个对象,例如通过RMI。 – 2012-08-15 16:46:28
语句具有getMoreResults()方法,该方法用于读取多个结果集。 (除非你的意思是,你的JDBC驱动程序不支持它,这是可能的) – 2012-08-15 16:53:53
@ThorbjørnRavnAndersen不幸的是我没有访问数据库(一个或多个)本身(客户端可以连接到运行之间的不同DB - 相同的一般结构),只能访问连接对象等等。如果这仍然可行,请介绍更多关于如何操作的细节。 :) – BenCole 2012-08-15 16:54:34