从ResultSet返回JSONArray或JSONObject?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (191)

我有以下方法.。

我正在尝试验证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"}
]
提问于
用户回答回答于

移动这一行

JSONObject obj = new JSONObject()

在for循环和此行之前

jsonArray.put(obj);
用户回答回答于

首先,尝试使用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 充当 JsonArray,而不是将其转换为JsonArray。有关此主题的更多信息,请访问:https://www.amihaiemil.com/2017/10/16/javaee8-jsoncollectors-oop-alternative.html

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励