Как я могу получить JDBC ResultSet как ArrayList?

Учитывая ваши данные JSON {"BaseID":1,"BaseName":"Bandar-e-Jask Airbase","InGameCord":[{"x":463,"y":451}]}:

  • "InGameCord" - это имя массива, для которого может быть создан экземпляр JSONArray.
  • Этот массив содержит только один элемент: {"x":463,"y":451}.
  • Этот элемент массива может быть создан как JSONObject. Он содержит две пары имя / значение:

    • "x" со значением 463.
    • "y" со значением 451.

На основании предоставленного вами кода создать экземпляр JSONArray:

JSONArray numbers = (JSONArray) jsonObject.get("InGameCord");

Извлечь первый (и единственный) элемент массива в JSONObject:

JSONObject jObj = (JSONObject) numbers.get(0);

Чтобы получить значение для «x» в переменную int, приведите Object, возвращенное get() к а Number, а затем получить его intValue():

int value = ((Number) jObj.get("x")).intValue();

Вы можете даже сделать все это в одной строке, но это уродливо:

[ 1117] [тысяча сто тридцать два]

15
задан Deckard 13 March 2009 в 11:55
поделиться

3 ответа

При пользовании библиотекой Apache DbUtils можно легко возвратить ResultSet как Список Карт.

public List query(String query) {
    List result = null;
    try {
        QueryRunner qrun = new QueryRunner();
        result = (List) qrun.query(connection, query, new MapListHandler());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return result;
}
17
ответ дан 1 December 2019 в 02:29
поделиться

Поместите код в метод. Очень просто назвать методы...

Первое, что пришло на ум:

public static List<Integer> readInts(
     PreparedStatement statement
) throws SQLException {
     ResultSet results = statement.executeQuery();
     try {
         assert results.getMetaData().getColumnCount() == 1;

         List<Integer> ints = new ArrayList<Integer>();
         while (results.next()) {
             ints.add(Integer.valueOf(results.getInt(1)));
         }
         return ints;
     } finally {
         results.close();
     }
}

Затем просто назовите его как:

List<Integer> ids = readInts(myStatemnet);

Готово.

6
ответ дан 1 December 2019 в 02:29
поделиться

Если Вашей проблемой является низкая производительность, настройте оператор прежде, чем выполнить ее с

java.sql.Statement.setFetchSize(int)

Эксперимент с 100, 1000, 10000.. Это избежит ненужных распространений в прямом и обратном направлениях, которые могут быть причиной замедления, которое Вы упомянули.

Кроме того, ArrayList.add () может быть медленным, если он должен много раз изменять размер внутреннего массива, поскольку он создает новый массив и копирует все данные в там. Попробуйте LinkedList вместо этого.

5
ответ дан 1 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: