>我正在做一项作业,但对这项任务的措辞感到困惑:
"添加一个名为getData的方法,该方法接受SQL字符串和字段数。getData 应该执行传入的查询,然后将 ResultSet 转换为简单的二维数组列表。
这是我到目前为止所拥有的...
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;
}
您需要使用 get()
方法从 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()
方法来检索。
您可以将 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;
你可以使用 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;
}