1

私は次のような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]

これが私がこの配列リストを取得した方法のコードです:

@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;
    }

しかし、配列の各要素がテーブルの行ではないように配列リストに取得したいのですが(私が今持っているもの)、テーブルのすべての個々の要素は配列の要素でなければなりません([1、2011-05 -10、1、22.0、2、2011-05-10、2、5555.0、3、2011-05-11、3、123.0、]。誰かがそれを手伝ってくれますか?

4

3 に答える 3

6

異なるタイプの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;
}
于 2012-05-15T06:13:18.230 に答える
2

コメントで、の取得を検討していると言っているのでArrayListStrings次のように機能するはずです。

@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仕様では、ほとんどのSQLタイプ(ここで使用されるすべてのタイプを含む)は、を使用して文字列として取得できることが義務付けられています(付録B )Statement.getString()

PS終了したらすぐに各JDBCステートメントを閉じることをお勧めします。これは通常、finallyブロック内で(または、Java 7ではtry-with-resources構文を使用して)実行されます。https://stackoverflow.com/a/10514079/367273を参照してください

于 2012-05-15T06:15:48.457 に答える
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
于 2012-05-15T06:16:14.860 に答える