【问题标题】:Java resultset column-wise output for JSONJSON 的 Java 结果集按列输出
【发布时间】:2016-10-06 07:08:11
【问题描述】:

我有一个

ResultSet rs = sql.getData(con, query);

有两列和几行。我想将数据作为 JSON 样式的输出作为输出,例如:

x: [1, 2, 3, 4],

y: [2.37, 2.16, 4.82, 1.73],

所以,我希望首先将 column1 的数据写入第一行“x”,然后将第二列 2 写入 y。

我找到的所有关于迭代结果集数据的文档都是逐行的,就像 HTML 表格输出一样

    while (rs.next()) {
        out.append("<tr>");
        for (int col = 1; col < rsMeta.getColumnCount() + 1; col++) {
            out.append("<td>");
            out.append(rs.getString(col));
            out.append("</td>");
        }
        out.append("</tr>");
        cnt++;
    }

【问题讨论】:

  • 你先写一些代码来创建 JSON 怎么样?
  • 您在谈论 JSON,但在您的代码中创建 XML(以非常幼稚的方式)。你想要 XML 还是 JSON?对于这两者,您都应该使用库而不是将输出格式创建为文本。
  • 我不想在 Java 中创建 JSON 对象,我只想以 JSON 方式将其输出到 webapp。我已经尝试过 json-simple 库,但无法按照我想要的方式输出。
  • 使用两个列表,每列一个。遍历记录并将每列的值存储到适当的列表中。最后,通过逐个迭代每个列表来创建输出。这仅适用于小型数据集,因为您必须将整个数据存储在内存中。
  • 这些库完全是为了创建 JSON 或 XML 格式的输出。因为手工操作很容易出错。您必须考虑所有特殊情况、转义等。抱歉,但是查看您的代码,您似乎甚至没有意识到 XML 和 JSON 之间的区别。

标签: java json database resultset


【解决方案1】:

您需要只迭代一次 ResultSet,但由于您希望按列而不是按行来获取值,因此您需要将它们存储在 List 对象中。

类似这样的:

List<Integer> x = new ArrayList<>();
List<Double> y = new ArrayList<>();
while (rs.next()) {
    x.add(rs.getInt(1));
    y.add(rs.getDouble(2));
}
System.out.println("x: " + x + ",");
System.out.println("y: " + y + ",");

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2010-12-30
    • 2012-12-13
    • 2012-02-16
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多