问题描述
我执行以下查询:
SELECT 1; CREATE TABLE ....; SELECT 2;
之后,我尝试获取所有resultSets。 我为此使用以下代码:
while(!stmt.getMoreResults()) {
stmt.getResultSet();
}
不幸的是,我得到了第一个结果集。 请告诉我我做错了什么?
1楼
从技术上讲,您的第二条CREATE TABLE
语句甚至不会返回结果集(尽管JDBC可能会返回受DML影响的记录的计数)。
因此,如果要捕获每个语句的概念性返回值,则应单独运行它们。
如果您的第二个语句实际上是SELECT
,那么也许我们可以找到某种方式将查询组合在一起。
阅读以了解如何处理您确实有多个选择的情况。 但是,请注意,并非所有数据库都支持此功能(例如,Oracle不支持此功能)。 并以了解为什么在单个JDBC调用中进行多个查询甚至可能是一件坏事。
2楼
您是否要说Java不能无障碍地完成.Net的工作? 就这么简单吗? 不管以批处理方式运行的脚本中的选择之间是哪种伪语句,C#代码中的bool IDataReader.NextResult()都会可靠地返回下一个结果,跳过我们正在尝试调试的Netezza的下一个伪语句。 多年来,所有支持批处理调用的平台都做同样的事情,以防万一我们不得不处理它们。