Java,MySQL方法,用于将不明确的ResultSet作为ArrayList返回

时间:2019-02-09 03:45:12

标签: java mysql jdbc

我正在做作业,但对此任务的措辞感到困惑:

”添加一个名为getData的方法,该方法接受SQLstring和字段数。 getData应该执行传入的查询,然后将ResultSet转换为简单的二维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 :(得分:1)

您可以将2D ArrayList视为“列表列表”。因此,正如Kartik在评论中提到的那样,您可以这样声明:

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;

答案 1 :(得分:1)

您需要使用get()方法来从ArrayList获得特定索引处的元素。您不能使用[]在数组列表中的特定索引处获取元素。它仅适用于数组,而您的resultSet不是数组,而是ArrayList。 您可以添加到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()方法进行检索。

答案 2 :(得分:0)

您可以使用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;
}