Java, метод MySQL для возврата неоднозначного ResultSet в виде ArrayList - PullRequest
0 голосов
/ 09 февраля 2019

Я работаю над назначением, но меня смущает формулировка этой задачи:

"Добавить метод с именем getData, который принимает строку SQL и число полей. GetData должен выполнить запрос, который был переданв, затем преобразовать ResultSet в простой 2-й ArrayList. "

Вот что у меня есть ...

public ArrayList<ArrayList<String>> getData(String sqlString, int numFields){
    Statement stmnt= this.conn.createStatement();

    ResultSet rs = stmnt.executeQuery(sqlString);
    ArrayList<ArrayList<String>> ary = new ArrayList();
    int row = 0;
    while (rs.next()){ // Get next row
        for (int i = 1; i <= numFields; i++) { // each column
            ary[row][i-1] = rs.getString(i);
        }
        row++;
    }
    return ary;
}

Я получаю ошибку error: array required, but ArrayList<ArrayList<String>> found

ary[row][i-1] = rs.getString(i);
   ^

Заранее благодарю за помощь и за чтение.

РЕДАКТИРОВАТЬ: Я считаю, что это окончательная / правильная / рабочая версия, благодаря ответам, предоставленным другими удивительными пользователями :)теперь jGrasp просто кричит мне на ловлю исключений.Я ценю помощь !!!

public ArrayList<ArrayList<String>> getData(String sqlString, int numFields){
    Statement stmnt= this.conn.createStatement();

    ResultSet rs = stmnt.executeQuery(sqlString);
    ArrayList<ArrayList<String>> ary = new ArrayList<>();

    while (rs.next()){   // Get next row
        ArrayList<String> columnsList = new ArrayList<>();
        for (int i = 1; i <= numFields; i++) { // each column
            columnsList.add(rs.getString(i));
            // Add the list of columns to our list of rows
            ary.add(columnsList);
        }
    }
    return ary;
}

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Вам нужно использовать метод get(), чтобы получить элемент по определенному индексу из ArrayList.Вы не можете использовать [], чтобы получить элемент по определенному индексу в массиве.Это возможно только для массивов, а ваш resultSet - это не массив, а ArrayList.Вы можете добавить к списку массивов вместо массива, как показано ниже,

ArrayList<ArrayList<String>> ary = new ArrayList();
    int row = 0;
    while (rs.next()){ // Get next row
    ArrayList<String> columns = new ArrayList<>();
        for (int i = 1; i <= numFields; i++) { // each column
            columns.add(rs.getString(i));
        }
        ary.add(columns)
  }

и использовать метод get() в списке для получения.

0 голосов
/ 09 февраля 2019

Вы можете сделать это тривиально, используя Apache DbUtils :

public ArrayList<ArrayList<String>> getData(String sqlString, int numFields){ // numFields unnecessary
    QueryRunner run = new QueryRunner();
    List ret = new ArrayList();
    ret.addAll(run.query(conn, sqlString));
    DbUtils.close(conn);
    return ret;
}
0 голосов
/ 09 февраля 2019

Вы можете думать о 2D ArrayList как о «списке списков».Итак, как упоминал Картик в комментариях, вы бы объявили это так:

ArrayList<ArrayList<String>> rows = new ArrayList<>();

Теперь, когда у вас есть база List, вы можете создавать и добавлять новые в этот базовый список:

while (rs.next()){   // Get next row
    ArrayList<String> columnsList = new ArrayList<>();
    for (int i = 1; i <= numFields; i++) { // each column
        columnsList.add(rs.getString(i));
        // Add the list of columns to our list of rows
        rows.add(columnsList);
    }
}
return rows;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...