MySQL的JDBC判断查询结果是否为空以及获取查询结果行数的方法
程序员文章站
2022-06-06 23:05:31
...
判断查询结果是否为空 在JDBC中没有方法hasNext去判断是否有下一条数据,但是我们可以使用next方法来代替。看next方法的官方解释: booleannext() throws Moves the cursor forward one row from its current position. A ResultSet cursor is initially pos
判断查询结果是否为空
在JDBC中没有方法hasNext去判断是否有下一条数据,但是我们可以使用next方法来代替。 看next方法的官方解释:-
boolean next() throws
Moves the cursor forward one row from its current position. AResultSet
cursor is initially positioned before the first row; the first call to the methodnext
makes the first row the current row; the second call makes the second row the current row, and so on.When a call to the
next
method returnsfalse
, the cursor is positioned after the last row. Any invocation of aResultSet
method which requires a current row will result in aSQLException
being thrown. If the result set type isTYPE_FORWARD_ONLY
, it is vendor specified whether their JDBC driver implementation will returnfalse
or throw anSQLException
on a subsequent call tonext
.If an input stream is open for the current row, a call to the method
next
will implicitly close it. AResultSet
object's warning chain is cleared when a new row is read.- Returns:
-
true
if the new current row is valid;false
if there are no more rows - Throws:
-
SQLException
- if a database access error occurs or this method is called on a closed result set
ResultSet
的请求当前行的方法调用都会导致SQLException
被抛出。但如果查询的结果设置为TYPE_FORWARD_ONLY,next方法在这时候根据实现厂商的不同,可能会返回false也坑能会抛出SQLException
异常
的警告将会被清楚。
关于的next的开始和结束,可以用下面的图来解释: 0->1->2->3->4->0 中间的1, 2, 3, 4是查询结果 ^ ^ 开始 结束
判断JDBC查询结果是否为空的正确姿势:
Statement statement = conn.createStatement(); ResultSet res = statement.executeQuery(selectSql); if (!res.next()) { //res is null } else { // res is not null }
获取查询结果的行数
JDBC并没有直接提供获取查询结果总行数的方法给我们调用,为此我们需要使用间接的手段来执行:第一种方法:
ResultSet res = ...使用某种方法获取查询结果 int nRow = 0; while(res.next()) { ++nRow; } res.beforeFirst(); // 其他代码不变
第二种方法:
ResultSet res = ...使用某种方法获取查询结果 res.last(); final int nRow = res.getRow(); res.beforeFirst(); // 其他代码不变