Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JDBC批处理选择返回多个结果集_Jdbc - Fatal编程技术网

JDBC批处理选择返回多个结果集

JDBC批处理选择返回多个结果集,jdbc,Jdbc,一个小问题,但我想知道是否有人知道我为什么会有以下行为。我有一个带有UNION指令的大型select语句。我需要调用此语句来获取输入列表。因此: Connection connection = createConnection(); PreparedStatement statement = connection.prepareStatement(dbLoadOneQuery, TYPE_FORWARD_ONLY, CONCUR_READ_ONLY); for (Integer param :

一个小问题,但我想知道是否有人知道我为什么会有以下行为。我有一个带有UNION指令的大型select语句。我需要调用此语句来获取输入列表。因此:

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,它将有零个或多个结果。这是意料之中的。我猜您对查询结果的期望与实际输出不匹配。