获取JAVA中sql查询的所有行的JSON

获取JAVA中sql查询的所有行的JSON,java,sql,json,db2,resultset,Java,Sql,Json,Db2,Resultset,我得到了下一个密码。我想我只需要做一点改变,但我不知道是什么。代码只返回最后一行,但我希望看到响应中的所有行。如果我声明限制为10,那么我希望得到10个结果作为响应 我应该换什么 多谢各位 @RequestMapping(value="/url/results/", method=RequestMethod.GET) public JsonResponse getResults() throws SQLException { Connection connect

我得到了下一个密码。我想我只需要做一点改变,但我不知道是什么。代码只返回最后一行,但我希望看到响应中的所有行。如果我声明限制为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);
    }
@RequestMapping(value=“/url/results/”,method=RequestMethod.GET)
public JsonResponse getResults()引发SQLException{
Connection Connection=connsSingle.getInstance().getConnection(env);
String selectSql=“从库表中选择*,其中年份=10,限制为10”;
语句Statement=connection.createStatement();
ResultSet rs=statement.executeQuery(selectSql);
JSONArray json=新的JSONArray();
ResultSetMetaData rsmd=rs.getMetaData();
JSONObject obj=新的JSONObject();
系统输出打印LN(rsmd);
while(rs.next()){
int numColumns=rsmd.getColumnCount();

对于(int i=1;i您正在迭代resultset,并将每一行添加到
JSONObject
中,但没有将
JSONObject
添加到
JSONArray

只需将
JSONObject(obj)
添加到
JSONArray(json)
中,您就会得到响应中的所有行/记录。

@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);
JSONArray对象=新的JSONArray();
while(rs.next()){
int numColumns=rsmd.getColumnCount();
for(inti=1;我使用Db2的SQL/JSON支持以本机方式运行它)
您可能不需要在Java中实现任何逻辑就可以从Db2数据库中获取此类JSON文档

而不是:

从库表中选择*,其中年份=10,限制为10
写:

选择cast(“[”| | listagg(
json_对象(
键“id”值t.id,
关键“年”值t年,
...
),“,”)| |“]')作为varchar(32672))
从lib.table t
式中t.年=10
只取前10行
不幸的是,Db2还不支持标准的SQL/JSON
JSON_ARRAYAGG()
函数,这就是为什么您必须自己解决字符串连接问题

使用第三方库 如果在这种情况下您可以选择使用第三方库,.在这样一个简单的情况下使用jOOQ,您也可以从JDBC
ResultSet
导出JSON,如下所示:

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);
String json=ctx.fetch(rs.formatJSON();

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

哦……我明白了……我需要推送数组中的所有对象,但当我想推送
对象时。推送(obj);
推送方法不起作用:
错误:找不到符号对象。(obj);
D;!!!我只知道在javascript中更容易…是的,我有一个解决方案,不是推送,而是添加:D!!!
json.add(obj);
在for-loopNo-problem@jgmontessa之前,但是
objects.add(obj);
必须在for-loop的键之后才能在迭代时添加对象。非常感谢!!!