我正在尝试通过命令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();