我有一个如下所示的ArrayList:
[
1 2011-05-10 1 22.0,
2 2011-05-10 2 5555.0,
3 2011-05-11 3 123.0,
4 2011-05-11 2 212.0,
5 2011-05-30 1 3000.0,
6 2011-05-30 1 30.0,
7 2011-06-06 1 307.0,
8 2011-06-06 1 307.0,
9 2011-06-06 1 307.0,
10 2011-06-08 2 3070.0,
11 2011-06-03 2 356.0,
12 2011-05-10 2 100.0,
13 2011-05-30 1 3500.0,
14 2011-05-10 3 1000.0,
15 2011-05-10 3 1000.0,
16 2011-05-07 1 5000.0,
17 2011-05-07 4 500.0,
18 2011-08-07 3 1500.0,
19 2011-08-08 6 11500.0,
20 2011-08-08 4 11500.0,
21 2011-08-08 7 11500.0,
22 2011-06-07 8 3000.0]
这是我得到这个arraylist的代码:
@Override
public ArrayList<Expenses> getExpenses() {
ArrayList<Expenses> expenses = new ArrayList<Expenses>();
try {
Statement stmt = myConnection.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM expenses");
while(result.next()){
Expenses expense = new Expenses();
expense.setNum(result.getInt(1));
expense.setPayment(result.getString(2));
expense.setReceiver(result.getInt(3));
expense.setValue(result.getDouble(4));
expenses.add(expense);
}
}
catch (SQLException e){
System.out.println(e.getMessage());
}
return expenses;
}
但我想得到一个arraylist,以便数组的每个元素不是表格的行(我现在拥有),但表格的每个元素都应该是数组的元素([1, 2011-05-10,1,22.0,2,2015-05-10,2,5555.0,3,2015-05-05,3,123.0,]。任何人都可以帮助我吗?
答案 0 :(得分:5)
您可以添加到不同类型的ArrayList元素中的唯一方法是将它们视为常规对象。但是你已经拥有的代码要优越得多。
@Override
public ArrayList<Object> getExpenses() {
ArrayList<Object> expenses = new ArrayList<Object>();
try {
Statement stmt = myConnection.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM expenses");
while(result.next()) {
expenses.add(new Integer(result.getInt(1)));
expenses.add(result.getString(2));
expenses.add(new Integer(result.getInt(3)));
expenses.add(result.getDouble(4));
}
}
catch (SQLException e) {
System.out.println(e.getMessage());
}
return expenses;
}
答案 1 :(得分:2)
由于您在评论中表示您希望获得ArrayList
Strings
,因此以下内容应该有效:
@Override
public ArrayList<String> getExpenses() {
ArrayList<String> expenses = new ArrayList<String>();
try {
Statement stmt = myConnection.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM expenses");
while (result.next()) {
expenses.add(result.getString(1));
expenses.add(result.getString(2));
expenses.add(result.getString(3));
expenses.add(result.getString(4));
}
}
catch (SQLException e) {
System.out.println(e.getMessage());
}
return expenses;
}
JDBC spec强制要求(在附录B中),大多数SQL类型 - 包括此处使用的所有类型 - 都可以使用Statement.getString()
作为字符串检索。
P.S。一旦完成它,关闭每个JDBC语句被认为是一种好习惯。这通常在finally
块中完成(或在Java 7中,使用try
- with-resources构造)。见https://stackoverflow.com/a/10514079/367273
答案 2 :(得分:1)
@Override
public ArrayList<String> getExpenses() {
ArrayList<String> expenses = new ArrayList<String>();
try {
Statement stmt = myConnection.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM expenses");
while(result.next()){
String expense = null;
setExpense(result.getInt(1).toString());
expenses.add(getExpense());
setExpense(result.getString(2));
expenses.add(getExpense());
setExpense(result.getInt(3).toString());
expenses.add(getExpense());
setExpense(result.getDouble(4).toString());
expenses.add(getExpense());
}
}
catch (SQLException e){
System.out.println(e.getMessage());
}
return expenses;
}
// make getter setters of expense accordingly