Java SQL:Statement.hasResultSet()?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java SQL:Statement.hasResultSet()?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1857字,纯文字阅读大概需要3分钟。
内容图文
![Java SQL:Statement.hasResultSet()?](/upload/InfoBanner/zyjiaocheng/890/d78606efdbed4991a61a1440c815ad48.jpg)
我的应用程序在一个平台上使用MySQL而在另一个平台上使用SQLite,因此存在差异,例如在使用DELETE FROM USERS等查询时:
>在MySQL上,PreparedStatement.getResultSet()将返回null.
>在SQLite上,PreparedStatement.getResultSet()将抛出java.sql.SQLException:没有可用的ResultSet.
这可能是也可能不是SQLite实现中的错误(我认为它应该返回null),但我必须以某种方式处理这个问题.
我可以使用try {…} catch(SQLException e){…},如果异常消息是“没有ResultSet可用”,则只需手动返回null.尽管如此,这并不是一种正确的方法.
我可以提出一个if,它会检查正在使用的JDBC驱动程序并做出相应的反应,但同样,这并不是解决问题的好方法.
我真正想要的是一个类似.hasResultSet()的方法,它返回一个布尔值或一种从已经执行的语句中获取SQL命令(SELECT,UPDATE,INSERT等)的方法. I can find neither of the two in SQL API though.
解决方法:
当执行返回未知数量结果的查询时,则需要使用execute().此方法返回一个指示结果类型的布尔值:
> true:result是ResultSet
> false:结果是更新计数
如果结果为true,则使用getResultSet()检索ResultSet,否则使用getUpdateCount()检索更新计数.如果更新计数为-1,则表示没有更多结果.请注意,当前结果为ResultSet时,更新计数也将为-1.如果没有更多结果或者结果是更新计数,那么知道getResultSet()应该返回null也是很好的,因此SQL Lite抛出异常的行为似乎是错误的.
现在,如果要检索更多结果,请调用getMoreResults()(或其兄弟接受int参数).此方法的布尔返回值与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()?全部内容,希望文章能够帮你解决Java SQL:Statement.hasResultSet()?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。