我工作的任务,但我通过这个任务的措辞混淆:
“添加名为GetData方法,它接受的SqlString和字段的数量。的getData应执行已传递查询,然后转换成结果集以简单的2 d的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;
}
您需要使用get()
方法从一个ArrayList特定指数来获得的元素。不能使用[]在一个特定的指数,以获得元素,在一个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()
名单上检索。
你可以把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;
你可以这样做平凡使用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;
}