java jdbc executeQuery()工作但execute()不工作(多个结果集)

时间:2014-09-19 12:39:07

标签: java jdbc sybase resultset

我正在尝试通过命令sp_configure(sybase)获取所有返回的表;它返回大约25个表。

当使用executeQuery函数执行sql语句时,我只能检索第一个表,这是此函数的目的:在结果中只抓取一个表:

PreparedStatement stmt = connection.prepareStatement("sp_configure", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
    //grab data from rs here
}
rs.close();

这里“rs”不为空并包含第一个结果表数据。

所以我必须使用“execute”函数,我可以通过使用函数getMoreResults()迭代它来获取所有ResultSet。

我这样做:

PreparedStatement stmt = connection.prepareStatement("sp_configure", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
boolean results = stmt.execute();

while (results) {
    ResultSet rs = stmt.getResultSet();
    while (rs.next()) {
        //grab data from rs here
    }
    rs.close();
    results = stmt.getMoreResults();
} 

但是execute()返回false!

我尝试使用语法prepareStatement(“exec sp_configure”)但它仍然返回false。 我也尝试过prepareStatement(“{sp_configure}”)或prepareStatement(“{exec sp_configure}”);但是对prepareStatement的调用失败了。

最后,我用“CallableStatement stmt = connection.prepareCall ...”尝试了所有相同的事情;结果相同。

我做错了什么?

注意:我正在使用jconnect60.jar连接到我的数据库。

解决方案

Daniel注意到的工作解决方案也是检查getUpdateCount(),如下所示:

CallableStatement stmt = connection.prepareCall("{call sp_configure}", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
boolean isResulset = stmt.execute();
int updResult = stmt.getUpdateCount();

while (isResulset || (updResult != -1)) {

    if (isResulset) {
        rs = stmt.getResultSet();
        while (rs.next()) {

        }
        rs.close();
    }
    isResulset = stmt.getMoreResults();
    updResult = stmt.getUpdateCount();
} 
stmt.close();

0 个答案:

没有答案