我有以下方法......
我正在尝试验证oracle DB中的结果。结果不是我所期望的,但我似乎无法弄清楚如何在不做地图或列表/地图的情况下做到正确。
public static JSONArray verifyDRFromButton(String transactionId) {
JSONArray jsonArray = new JSONArray();
try {
ResultSet resultSet;
Constants.threadSleep(5000);
Constants.verifyOracle();
String databaseConnectionString = String.format("jdbc:oracle:thin:@%s:%s:%s", "*****", "****", "*****");
Connection conn = DriverManager.getConnection(databaseConnectionString,"*****","*****");
Statement stmt = conn.createStatement();
resultSet = stmt.executeQuery("SELECT * from ****** WHERE ***** = '" + transactionId + "'");
//Print DB Table
Constants.threadSleep(500);
//DBTablePrinter.printResultSet(rs);
//result = rs.toString();
while (resultSet.next()) {
int totalRows = resultSet.getMetaData().getColumnCount();
for (int i = 0; i < totalRows; i++) {
JSONObject obj = new JSONObject();
obj.put(resultSet.getMetaData().getColumnLabel(i + 1)
.toLowerCase(), resultSet.getObject(i + 1));
jsonArray.put(obj);
}
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return jsonArray;
}
结果看起来像这样......
[
{"id": "idvalue"},
{"id2": "id2value"},
{"name": "namevalue"},
{"name2": "name2value"}
]
我希望如此。
[
{"id": "idvalue", "id2": "id2value"},
{"name": "namevalue", "name2": "name2value"}
]
答案 0 :(得分:1)
移动此行
JSONObject obj = new JSONObject()
在for循环和此行之前
jsonArray.put(obj);
循环之后 如果您没有得到预期的结果,请分享您的结果
答案 1 :(得分:0)
首先,尝试使用JSON-P(https://javaee.github.io/jsonp/index.html),这是自Java EE 7以来enterirpise Java中的标准JSON规范。
第二,这个
[
{"id":, "idvalue"},
{"id2":, "id2value"},
{"name":, "namevalue"},
{"name2":, "name2value"}
]
不是有效的JsonArray,因为包含的对象不是有效的JSON。 所以你的算法一定有问题。
第三,如果你使用基于接口的JSON-P,你可以根据ResultSet添加你的JsonArray实现:这意味着你至少可以隐藏那个程序混乱,如果不重构它并使它更多优雅。
我们的想法是将ResultSet act 设为JsonArray,而不是将其转换为JsonArray。有关此主题的更多信息,请访问:https://www.amihaiemil.com/2017/10/16/javaee8-jsoncollectors-oop-alternative.html