代码之家  ›  专栏  ›  技术社区  ›  letsCode

从ResultSet返回JSONArray或JSONObject

  •  0
  • letsCode  · 技术社区  · 6 年前

    我有以下方法。。。

    我正在尝试在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"}
    ]
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Deepansh Parmani    6 年前

    移动这条线

    JSONObject obj = new JSONObject()
    

    在for循环和此行之前

    jsonArray.put(obj);
    

    后循环 如果你没有得到预期的结果,请分享你的结果

        2
  •  0
  •   amihaiemil    6 年前

    首先,尝试使用JSON-P( https://javaee.github.io/jsonp/index.html )这是自JavaEE7以来EnterirpiseJava中的标准JSON规范。

    第二,这个

    [
        {"id":, "idvalue"}, 
        {"id2":, "id2value"}, 
        {"name":, "namevalue"}, 
        {"name2":, "name2value"}
    ] 
    

    不是有效的JsonArray,因为包含的对象不是有效的JSON。 所以你的算法一定有问题。

    第三,如果您使用基于接口的JSON-P,您可以根据结果集添加JsonArray的实现:这意味着您至少可以隐藏程序混乱,即使不进行重构,也可以使其更加优雅。

    这样做的目的是生成结果集 行为 作为JsonArray,而不是将其转换为JsonArray。有关此主题的更多信息,请参见: https://www.amihaiemil.com/2017/10/16/javaee8-jsoncollectors-oop-alternative.html