【问题标题】:Proper display converted SQL resultset into JSON正确显示将 SQL 结果集转换为 JSON
【发布时间】:2016-11-21 16:33:20
【问题描述】:

我正在尝试为 Web 服务实现 java 方法,该方法应从表中检索数据并以 json 格式返回结果。为此,我使用 json_agg() 函数将查询结果转换为我想要显示的 json,但到目前为止它以错误的格式显示。这是方法本身:

public String GetRowsFromTable() throws SQLException {

    Connection connection = null;
    String result = "";
    try {
        connection = Connection.getConnection();
        PreparedStatement prepStmt = conn.prepareStatement("SELECT json_agg(table1) FROM table");
        ResultSet rs = prepStmt.executeQuery();
        result += rs;
        System.out.println(rs);
    } catch (SQLException sqlex) {
        sqlex.printStackTrace();
    } finally {
        connection.close();
    }

    return result;
}

控制台显示如下结果:

org.postgresql.jdbc.PgResultSet@5179f609

任何帮助将不胜感激。

【问题讨论】:

  • 但目前显示的格式错误这完全没有意义。
  • 这也是Object.toString() 的默认输出,而不是正确调用ResultSet,只需查看ResultSet 的源代码,它只是执行默认操作在Object。我认为您需要阅读有关您正在尝试做什么的文档,或者如果您已经阅读过,请再次阅读。

标签: java json postgresql jdbc resultset


【解决方案1】:

您需要遍历ResultSet 并检索每个ResultSet 实例不是您的实际结果,它是结果的容器。您的查询返回一列,因此您可以通过索引 1 访问其中的内容(JDBC 列索引从 1 开始,而不是 Java 中通常的 0)。要将结果集移动到下一行,您需要使用 next()

ResultSet rs = prepStmt.executeQuery();
if (rs.next()) {
    System.out.println(rs.getString(1));
}

通常您会使用while() 循环来遍历ResultSet 中的所有行,但由于聚合,您的查询只会返回单行,因此这不是必需的。您确定真的想要将表格的所有行作为一个巨大的 JSON 文档。如果表包含一百万行怎么办?

这在 Java JDBC 教程中都有解释:

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2015-03-31
    相关资源
    最近更新 更多