对于我正在处理的胖客户端项目,我必须远程连接到数据库(IBM i 系列)并执行一些与 SQL 相关的任务:
Download/Update a set of local/offline 'control' data
- 此数据可能在未注意到的运行之间发生了变化。On command, download data from multiple (15-20) tables and store separately into a single Java object.
表的名称是已知的,但是模式名称在运行之间会发生变化,并且可以在运行之间发生变化(据我所知,PreparedStatements
不允许动态插入模式)。我曾考虑使用 joins/unions/etc 将所有这些查询作为一个来执行,但该项目要求我在表数据之间进行内存分离(而不是一个大的连接块)。Perform between 2 and 100+ repetitions of (2)
最后一个因素是,这需要在可能的最旧计算机上使用 Java 1.5 在高延迟(可能是拨号)网络连接上运行。
目前我运行 15-20 动态构造PreparedStatements
,但我知道这是相当低效的(我测量,以避免过早优化ala Knuth)。
执行这些任务最有效和容错的方法是什么?
我的想法:
- 关于
(1)
,除了对照新表检查整个表之外,我真的不知道,此时我觉得我不妨下载新的(可能且可能未更改的)表并替换旧表,但这需要更多时间。 - For
(2)
:理想情况下,我能够构建类似于一组SELECT
语句的东西,一次发送它们,并让数据库ResultSet
为每个内部查询返回一个。但是,据我了解,既不Statement
也不PreparedStatement
支持返回多个ResultSet
对象。 - 最后,我能想到的最好方法
(3)
是批量(2)
操作。