我正在做作业,但对此任务的措辞感到困惑:
”添加一个名为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;
}
答案 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;
}