JDBC批处理选择返回多个结果集
一个小问题,但我想知道是否有人知道我为什么会有以下行为。我有一个带有UNION指令的大型select语句。我需要调用此语句来获取输入列表。因此:JDBC批处理选择返回多个结果集,jdbc,Jdbc,一个小问题,但我想知道是否有人知道我为什么会有以下行为。我有一个带有UNION指令的大型select语句。我需要调用此语句来获取输入列表。因此: Connection connection = createConnection(); PreparedStatement statement = connection.prepareStatement(dbLoadOneQuery, TYPE_FORWARD_ONLY, CONCUR_READ_ONLY); for (Integer param :
Connection connection = createConnection();
PreparedStatement statement = connection.prepareStatement(dbLoadOneQuery, TYPE_FORWARD_ONLY, CONCUR_READ_ONLY);
for (Integer param : params) {
statement.setInt(1, param);
statement.setInt(2, param);
statement.addBatch();
}
statement.execute();
do {
ResultSet resultSet = statement.getResultSet();
// snip
} while (statement.getMoreResults());
现在,我意识到我可以用很多方法做到这一点。是否有更好的方法不是问题。相反,我想知道为什么我的结果是一堆一堆的?我需要从我的声明中阅读3-4个单独的结果集。它们不对应于联合,它们的大小不相等,并且数据不是以任何特定形式分组的
我猜这是一个特定于驱动程序的东西,但是我找不到允许这种行为的JDBC规范。驱动程序是jconn4库中的com.sybase.jdbc4.jdbc.SybDriver
jConnect (TM) for JDBC(TM)/7.07 GA(Build 26666)/P/EBF19485/JDK 1.6.0/jdbcmain/Wed Aug 31 03:14:04 PDT 2011
这不是执行联合查询,而是批处理n个单独的查询(即
dbLoadOneQuery
,使用n个不同的参数组合),一次执行,然后检索n个单独的结果集(每个查询一个)
如果需要UNION
s,则实际执行UNION
查询
根据您的查询,可能类似于:
StringBuilder query = new StringBuilder();
query.append(dbLoadOneQuery);
int queryCount = params.size();
// If we have more than one parameter add a UNION clause:
while (queryCount-- > 1) {
query.append(" UNION ").append(dbLoadOneQuery);
}
PreparedStatement statement = connection.prepareStatement(query.toString());
int paramIdx = 1;
for (Integer param : params) {
statement.setInt(paramIdx++, param);
statement.setInt(paramIdx++, param);
}
ResultSet rs = statement.executeQuery();
变量“dbLoadOneQuery”中包含的查询是一个包含联合的查询。是的,它正在批处理n个不同的调用,但不返回n个结果。那么我不理解你的问题。每个批处理查询都有自己的resultset,它将有零个或多个结果。这是意料之中的。我猜您对查询结果的期望与实际输出不匹配。