【问题标题】:How to retrieve specific cells from ResultSet? [closed]如何从 ResultSet 中检索特定单元格? [关闭]
【发布时间】:2021-11-27 16:09:00
【问题描述】:

我是 Java 的 SQL 新手,我目前正在尝试从 ResultSet 中获取数据。

我正在检索的表如下所示:

Name Data
abc true
def false
... ...

我正在尝试获取数据列中的所有信息并将其作为布尔数组返回。我该怎么做呢?我试过resultSet.getArray("Data"),但没用。

【问题讨论】:

  • 您需要遍历 ResultSet 中的每一行,然后从“data”列中获取每个值并将其添加到 ArrayList。用简单的方法(我知道)没有捷径可走。此外,您应该更改您的 SQL 查询,只返回“数据”列,不要在您的应用程序中传递尽可能多的数据。

标签: java sql jdbc resultset


【解决方案1】:

ResultSet 级别很低。它几乎完全反映了数据库为您提供的内容。

因此,在 ResultSet 本身中没有你想要的东西。您有 3 个选项:

  1. 编写一个为您执行此操作的库,然后使用它。或者,找到一个现有的——JDBC 原始 API 不是特别方便或易于使用;看看例如JOOQJDBI

  2. 只需自己编写这段代码,每次:

int trues = 0, falses = 0; // a list of boolean values seems kinda stupid, no?
while (rs.next()) {
    if (rs.getBoolean("Data")) trues++;
    else falses++;
}
  1. 更改 SQL 的性质:
SELECT COUNT(*), Data FROM myTable GROUP BY Data;

然后在java中:

while (rs.next()) {
    int count = rs.getInt(1);
    boolean isTrue = rs.getBoolean(2);
}

您可以使用.getArray(),但这需要您选择一个实际的 SQL 数组。 ARRAY_AGG 之类的函数可以做到这一点:

SELECT ARRAY_AGG(Data) FROM MyTable

然后在java中:

if (!rs.next()) throw new SQLException();
Array a = rs.getArray(1);

但是现在你有一个 sql Array 对象,它也不是特别方便。我告诉过你,JDBC 并不是一个特别好用的 API,对吧?我真的怀疑你会想要这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2011-10-18
    • 2021-03-01
    • 2013-07-18
    • 2011-01-19
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多