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

如何从java.sql.ResultSet中获取所有剩余行?附Datastax实现参考

用java.sql.ResultSet实现Datastax ResultSet的all()转模型数组功能

首先,标准JDBC的java.sql.ResultSet和Datastax Cassandra驱动的ResultSet逻辑不一样——它是基于游标逐行读取的,没有现成的all()方法一次性获取所有行。不过我们可以手动遍历游标,把每一行转成ReportDescription对象,最后再转成数组,实现和原来完全一样的效果。

下面是对应的完整实现代码:

List<ReportDescription[]> result = new ArrayList<>();
List<ReportDescription> tempList = new ArrayList<>();

try {
    // 遍历JDBC ResultSet的所有剩余行
    while (resultSet.next()) {
        // 取出"value"字段,实例化ReportDescription对象
        ReportDescription report = new ReportDescription(resultSet.getObject("value"));
        tempList.add(report);
    }

    // 将临时List转成ReportDescription数组
    ReportDescription[] csvReportDescriptions = tempList.toArray(new ReportDescription[0]);
    result.add(csvReportDescriptions);
} catch (SQLException e) {
    // 务必处理JDBC操作可能抛出的SQLException
    e.printStackTrace();
    // 也可以根据业务需求抛出自定义异常或做其他容错处理
}

关键细节说明:

  • 为什么先用List<ReportDescription>临时存储?因为JDBC的ResultSet无法提前精准获取剩余行数(虽然可以通过ResultSetMetaData尝试,但不同数据库支持度不一,效率也不高),用List动态收集行数据是最稳妥的方式。
  • tempList.toArray(new ReportDescription[0])是Java中List转数组的常用写法,JDK会自动根据List的实际大小创建对应长度的数组。
  • 不能忽略SQLException:JDBC的next()、getObject()等操作都会抛出这个检查型异常,必须显式处理。

对比你原来的Datastax代码,核心逻辑是完全一致的——都是把每一行映射为目标对象,最后转成数组加入结果列表,只是JDBC需要我们手动完成游标遍历的步骤而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:41:04