进入 JSON 来自 sql 查询的所有行 JAVA

Get in to JSON all the rows from sql query in JAVA

我得到了下一个密码。我想我只需要做一点改变,但我不知道是什么。该代码仅 returns 最后一行,但我想查看所有响应行。如果我声明 LIMIT 10,那么我想得到 10 个结果作为响应。

我应该改变什么?

谢谢。

    @RequestMapping(value="/url/results/", method=RequestMethod.GET)
    public JsonResponse getResults() throws SQLException {

        Connection connection = ConnSingle.getInstance().getConnection(env);
        String selectSql = "SELECT * FROM Lib.Table WHERE YEARS=10 LIMIT 10";

        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(selectSql);


        JSONArray json = new JSONArray();
        ResultSetMetaData rsmd = rs.getMetaData();
        JSONObject obj = new JSONObject();

        System.out.println(rsmd);

        while(rs.next()) {
            int numColumns = rsmd.getColumnCount();
            for (int i=1; i<=numColumns; i++) {
                String column_name = rsmd.getColumnName(i);
                obj.put(column_name, rs.getObject(column_name));
            }
        }

        rs.close();
        statement.close();
        connection.close();

        return new JsonResponse(obj);
    }

您正在遍历结果集并将每一行添加到 JSONObject 但没有将 JSONObject 添加到 JSONArray.

只需将 JSONObject (obj) 添加到 JSONArray (json) 中,您将在响应中得到所有 rows/records。 :)

@jaydip 是对的(他比我快几分钟)。 这是一个例子... 您正在将所有结果推送到同一个 obj 对象中。 要显示所有结果,您必须将 "obj" 推入这样的数组中:

JSONArray objects = new JSONArray();
while(rs.next()) {
            int numColumns = rsmd.getColumnCount();
            for (int i=1; i<=numColumns; i++) {
                String column_name = rsmd.getColumnName(i);
                obj.put(column_name, rs.getObject(column_name));
                objects.add(obj);
            }
        }
rs.close();
        statement.close();
        connection.close();

        return new JsonResponse(objects);

在 Db2 的 SQL/JSON 支持下本地执行此操作

您可能无需在 Java 中实现任何逻辑即可从 Db2 数据库中获取此类 JSON 文档,just use the Db2 native SQL/JSON capabilities, as I've described in this article

而不是:

SELECT * FROM Lib.Table WHERE YEARS=10 LIMIT 10

写入:

SELECT cast(('[' || listagg(
  json_object(
    KEY 'id' VALUE t.id,
    KEY 'years' VALUE t.years,
    ...
  ), ',') || ']') AS varchar(32672))
FROM lib.table t
WHERE t.years = 10
FETCH FIRST 10 ROWS ONLY

遗憾的是,Db2 尚不支持标准 SQL/JSON JSON_ARRAYAGG() 函数,这就是为什么您必须自己执行字符串连接解决方​​法的原因。

使用第三方库

如果在这种情况下您可以选择使用第三方库,jOOQ can handle that emulation of JSON_ARRAYAGG for you。在像这样的简单情况下使用 jOOQ,您也可以像这样从 JDBC ResultSet 中导出 JSON:

String json = ctx.fetch(rs).formatJSON();

(免责声明:我在 jOOQ 背后的公司工作)