Java:将ResultSet查询为JSON [英] Java: Query ResultSet to JSON
本文介绍了Java:将ResultSet查询为JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
通过以下代码发送到Oracle DB的查询,并且应该以JSON
的形式返回查询结果:
Query to Oracle DB being sent via following code and supposed to return the query result as JSON
:
Connection conn ;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:dbname";
conn = DriverManager.getConnection(url,"username","pwd");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table4 where ID = '5'");
while (rs.next()) {
String s = rs.getString("*");
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(s);
}
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是,String s
的值始终为null.
However, the value of String s
is always null.
我去过解决方案此处,但是它没有从表中选择*
无效.
I've been to the solution here but it doesn't work for selecting *
from the table.
推荐答案
要输出JSON,您需要首先将数据累积到List<Map<String, Object>>
中.
To output JSON, you want to accumulate your data into a List<Map<String, Object>>
first.
使用ResultSetMetaData
获取列数和列名.
List<Map<String, Object>> rows = new ArrayList<>();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while (rs.next()) {
// Represent a row in DB. Key: Column name, Value: Column value
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
// Note that the index is 1-based
String colName = rsmd.getColumnName(i);
Object colVal = rs.getObject(i);
row.put(colName, colVal);
}
rows.add(row);
}
// Write the list of rows to output
// Recommend to use jackson-ObjectMapper to streaming json directly to outputstream:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(response.getOutputStream(), rows);
要使用Jackson ObjectMapper,请向您的项目添加依赖项:
To use Jackson ObjectMapper, add dependency to your project:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
这篇关于Java:将ResultSet查询为JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文