You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证JDBC查询结果是否包含数据?

解决JDBC查询结果断言无数据的问题

你的代码未生效的核心原因是ResultSet的初始游标位置在第一行数据之前,直接调用rs.getRow()会返回0,无法正确反映结果集的真实行数;另外如果之前已经移动过游标,rs.next()的判断结果也会出错。

正确的解决方案分两种场景:


场景1:仅需验证结果集是否包含数据

不需要额外统计行数,直接通过rs.next()的返回值断言,这是最简洁高效的方式:

// 断言结果集存在数据,无数据时断言失败
Assert.assertTrue(rs.next());

// 如果之后还需要遍历结果集,可将游标回退到初始位置(需ResultSet支持滚动)
rs.previous();

场景2:需要打印总行数并验证数据存在

默认的ResultSet是不可滚动的,无法直接跳到最后一行统计行数,需要创建Statement时指定游标类型:

// 创建支持滚动的Statement,允许移动游标到任意位置
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("你的SQL查询语句");

// 移动游标到最后一行,获取总行数
rs.last();
int rowCount = rs.getRow();
System.out.println("Table contains " + rowCount + " rows");

// 将游标移回初始位置,方便后续遍历(如果需要)
rs.beforeFirst();

// 断言行数大于0,无数据时断言失败
Assert.assertTrue(rowCount > 0);

注意事项

  • 确保在执行断言逻辑前,ResultSet的游标处于初始位置(beforeFirst),如果之前已经调用过rs.next()等方法移动过游标,会导致判断结果错误。
  • 若使用不可滚动的ResultSet,调用rs.last()会抛出SQLException,必须指定正确的Statement类型。

内容的提问来源于stack exchange,提问作者Harika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:31:22