[英]Returning JSONArray or JSONObject from ResultSet
我有以下方法...
我正在嘗試在oracle數據庫中驗證結果。 結果不是我所期望的,但是我似乎無法弄清楚如何在不制作地圖或列表/地圖的情況下正確進行制作。
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"}
]
移動這條線
JSONObject obj = new JSONObject()
在for循環和此行之前
jsonArray.put(obj);
循環之后如果您沒有獲得預期的結果,請分享您的結果
首先,從Java EE 7開始,嘗試使用JSON-P( https://javaee.github.io/jsonp/index.html ),這是enterirpise Java中的標准JSON規范。
第二,這個
[
{"id":, "idvalue"},
{"id2":, "id2value"},
{"name":, "namevalue"},
{"name2":, "name2value"}
]
不是有效的JsonArray,因為所包含的對象不是有效的JSON。 因此,您的算法一定存在問題。
第三,如果您使用基於接口的JSON-P,則可以基於ResultSet添加JsonArray的實現:這意味着您至少可以隱藏該程序混亂,即使不進行重構也可以使其更加優雅。
這個想法是使ResultSet 充當 JsonArray,而不是將其轉換為JsonArray。 有關此主題的更多信息,請訪問: https : //www.amihaiemil.com/2017/10/16/javaee8-jsoncollectors-oop-alternative.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.