一次性获取`java.sql.ResultSet`行中的所有值

Posted

技术标签:

【中文标题】一次性获取`java.sql.ResultSet`行中的所有值【英文标题】:Get all values in the row `java.sql.ResultSet` in one go 【发布时间】:2019-07-25 10:48:58 【问题描述】:

使用java.sql.ResultSet 类,出于性能考虑,我想将一行中的所有单元格作为对象列表或对象数组获取,并推迟每个单元格的处理/获取。以下方法:

Object obj = resultSet.getObject(i);

应该被调用columnCount的次数。

最快的方法是什么? / 为什么缺少一个看似明显的功能?

【问题讨论】:

只使用循环怎么样? 您打算如何避免“获取”?这听起来像是一个过早的大规模优化。 Obj[] getAllObjects() 不会减少函数调用的次数吗? “列”折叠?为什么考虑速度不合时宜? 也许是因为没有人想要一个 Object 数组,他们必须对每个元素进行类型转换 在我认为不太具体的用例中,我加载数据和一些元数据,将其发送到某个前端模块,可能在将来,在单独的机器上。前端将进一步处理铸造和处理。 While / 因为我的后端将成为我的瓶颈。因此,拥有该功能会很好。我希望我的设计不会引起人们的注意:) 【参考方案1】:

我认为这可能会满足您的需求。它应该返回ResultSet 当前行的所有列值。

List<Object> getValues(ResultSet resultSet) 
   ResultSetMetaData metadata = resultSet.getMetadata();
   int numberOfCols = metadata.getColumnCount();

   List<Object> values = new ArrayList<>();

   for(i=0; i < numberOfCols; i ++) 
      values.add(resultSet.getObject(i));
   

   return values;

【讨论】:

以上是关于一次性获取`java.sql.ResultSet`行中的所有值的主要内容,如果未能解决你的问题,请参考以下文章

按名称从 ResultSet 中获取值

如何超时 java.sql.ResultSet

如何从 JDBC ResultSet 中获取列数?

java.sql.ResultSet、CallableStatement、SQLInput 没有通用接口

java.sql.ResultSet.next() 光标常见错误总结分析

为啥 java.sql.ResultSet 的“getFloat(column)”方法不返回任何内容,而其他方法则返回?