Возвращение JSONArray или JSONObject из ResultSet - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующий метод ...

Я пытаюсь проверить результаты в оракуле БД.Результат не тот, который я ожидаю, но я не могу понять, как сделать это правильно, не делая карту или список / карту.

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 ]

0 голосов
/ 05 июня 2018

Переместить эту строку

JSONObject obj = new JSONObject()

Перед циклом for и этой строкой

jsonArray.put(obj);

После цикла Если вы не получили ожидаемых результатов, поделитесь результатами

0 голосов
/ 05 июня 2018

Прежде всего, попробуйте использовать JSON-P (https://javaee.github.io/jsonp/index.html), который является стандартной спецификацией JSON в Java для бизнеса, начиная с Java EE 7.

Во-вторых, это

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

не является допустимым JsonArray, поскольку содержащиеся объекты не являются допустимыми JSON. Поэтому в вашем алгоритме должно быть что-то не так.

В-третьих, если вы используете JSON-P, основанный на интерфейсах, выможет добавить вашу реализацию JsonArray, основанную на ResultSet: это означает, что вы можете, по крайней мере, скрыть этот процедурный беспорядок, если даже не реорганизовать его, и сделать его более элегантным.

Идея состоит в том, чтобы заставить ResultSet действовать как JsonArray, а не преобразовывать его в JsonArray. Подробнее об этой теме здесь: https://www.amihaiemil.com/2017/10/16/javaee8-jsoncollectors-oop-alternative.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...