Помещение varchars из набора результатов в ArrayList - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь получить данные из одного конкретного столбца в моей таблице, а затем создаю из него arrayList. Я делаю это, потому что мне нужно иметь возможность искать содержимое набора результатов.

Итак, я извлекаю набор результатов, затем выполняю getArray для него, чтобы извлечь данные для этого столбца в виде массива,

regionValidRS.getArray("REGION")

но это дает мне исключение:

Invalid column type: getARRAY not implemented for class oracle.jdbc.driver.T4CVarcharAccessor

Из того, что я понимаю, я думаю, что это означает, что метод извлечения varchars как массивов не реализован. я не могу использовать метод getArray для этого, и мне придется вручную перебирать все элементы, чтобы вставить их в ArrayList.

Есть ли другой способ сделать это? Предпочтительно более быстрый метод, который не будет включать в себя циклическое прохождение всех элементов?

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

getArray не делает то, что вы думаете, что он делает. Вот что говорит Javadoc :

Извлекает значение указанного столбца в текущей строке из этот объект ResultSet как объект Array в программировании Java язык.

Возвращает: объект Array, представляющий значение SQL ARRAY в указанный столбец

(выделено мое).

Вы должны перебрать набор результатов. Это единственный способ.

0 голосов
/ 20 февраля 2012

Метод getArray предназначен для чтения значения столбца ARRAY из текущей строки.(Немногие базы данных реализуют тип массива, и многие люди не знают о них.) Вы пытаетесь использовать его со столбцом varchar, и он просто так не работает.

Что вы должны сделать в этом случаеэто цикл по строкам результирующего набора.В каждой строке вы получаете значение if столбца с getString.Вы сохраняете строку в списке, который строите.Там нет более быстрого пути.

0 голосов
/ 20 февраля 2012

Чтобы выбрать значения из столбца Varchar и строки в ArrayList, используйте следующее:

String sql = "Select yourCol From yourTable";
ArrayList<String> results = new ArrayList<>();
try(Connection con = getConnection(); PreparedStatement prep = con.prepareStatement(sql)){      
    try(ResultSet rs = prep.executeQuery()){
    while (rs.next()){
            results.add(rs.getString(1));
    }
}

Я бы предложил выполнить любую обработку на стороне базы данных.

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