获取JAVA中sql查询的所有行的JSON
我得到了下一个密码。我想我只需要做一点改变,但我不知道是什么。代码只返回最后一行,但我希望看到响应中的所有行。如果我声明限制为10,那么我希望得到10个结果作为响应 我应该换什么 多谢各位获取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
@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/JSONJSON_ARRAYAGG()
函数,这就是为什么您必须自己解决字符串连接问题
使用第三方库
如果在这种情况下您可以选择使用第三方库,.在这样一个简单的情况下使用jOOQ,您也可以从JDBCResultSet
导出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的键之后才能在迭代时添加对象。非常感谢!!!