gpt4 book ai didi

Java SQL : Statement. hasResultSet()?

转载 作者:行者123 更新时间:2023-11-29 06:39:30 25 4
gpt4 key购买 nike

我的应用程序在一个平台上使用 MySQL 而在另一个平台上使用 SQLite,因此存在差异,例如在使用像 DELETE FROM USERS 这样的查询时:

  • MySQL 上,PreparedStatement.getResultSet() 将返回 null
  • SQLite 上,PreparedStatement.getResultSet() 将抛出 java.sql.SQLException: no ResultSet available

这可能是也可能不是 SQLite 实现中的错误(我认为它应该返回 null),但我必须以某种方式处理这个问题。

我可以使用 try { ... } catch (SQLException e) { ... } 如果异常消息是 "no ResultSet available",只需手动返回 null。不过,这似乎不是正确的做法。

我可以提出一个 if 来检查正在使用的 JDBC 驱动程序并做出相应的 react ,但同样,这并不是解决问题的好方法。

我真正想要的是返回 boolean.hasResultSet() 之类的方法 OR 获取 SQL 命令的方法(SELECT、UPDATE、INSERT 等)来自已执行的语句。 I can find neither of the two in SQL API though.

最佳答案

当执行返回未知数量结果的查询时,您需要使用 execute() .此方法返回一个指示结果类型的 boolean:

  • true:结果是一个 ResultSet
  • false : 结果是更新计数

如果结果为 true,则使用 getResultSet()检索 ResultSet,否则 getUpdateCount()检索更新计数。如果更新计数为 -1,则表示没有更多结果。请注意,当当前结果为 ResultSet 时,更新计数也将为 -1。如果没有更多结果或者结果是更新计数,getResultSet() 应该返回 null 也是很好的,因此 SQL Lite 抛出异常的行为似乎是错误的。

现在,如果您想检索更多结果,请调用 getMoreResults() (或者它的兄弟接受一个 int 参数)。该方法的boolean返回值与execute()的意义相同,所以false不代表没有结果!

只有当 getMoreResults() 返回 false getUpdateCount() 返回 -1 时,才会没有更多结果>(在 Javadoc 中也有记录)

本质上这意味着如果你想正确处理所有结果你需要做类似的事情:

PreparedStatement pstmt = connection.prepareStatement(...);
// ...
boolean result = pstmt.execute();
while(true) {
if (result) {
ResultSet rs = pstmt.getResultSet();
// Do something with resultset ...
} else {
int updateCount = pstmt.getUpdateCount();
if (updateCount == -1) {
// no more results
break;
}
// Do something with update count ...
}
result = pstmt.getMoreResults();
}

关于Java SQL : Statement. hasResultSet()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14213824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com