2016-05-10 17 views
0

2列の結果セットを配列のarraListに変換しようとしています。私のコードをチェックするために、私はそれを印刷します。その目的のために、私は2列5列の弱い表を作った。resultSetをarrayListに変換して出力する

問題は、私のテストプリントが元のテーブルの5倍のプリントアウトをしているということです。だから私は混乱している。 resultSetを間違って変換しているのですか、それとも印刷しませんか?誰かが助けてくれましたか?

コード:

public static void partner() { 
    ArrayList <int[]> result = new ArrayList<int[]>(); 

    String select = "SELECT ID, age FROM individuen WHERE age BETWEEN 20 AND 40 " + 
    "AND Familienstand IS 2 ORDER BY RANDOM() LIMIT 5"; 

    DBController dbc = DBController.getInstance(); 
    dbc.initDBConnection(); 


    try { 
     Statement stmt = DBController.connection.createStatement(); 
     ResultSet rs = stmt.executeQuery(select); 

     int columnCount = rs.getMetaData().getColumnCount(); 
     while(rs.next()){ 
      int[] row = new int[columnCount]; 
      for (int i = 0; i < columnCount ; i++){ 
       row[i] = rs.getInt(i + 1); 
      } 
      result.add(row); 

     } 
     Iterator<int[]> it = result.iterator(); 
     while (it.hasNext()) { 
      for (int[] arr : result) { 
       System.out.println(Arrays.toString(arr)); 
      } 
       it.next(); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

} 
+0

なぜあなたはit.next()を使用していますか? –

+0

arrayListの次の要素を取得するために使用する必要はありませんか? – UsefulUserName

+0

2回あなたの結果をトラバースしている場合、it.hasNext()はより多くの値を含んでいればtrueを返します。 –

答えて

3

ループを1つだけループforまたはwhileのループにしてください。

for (int[] arr : result) { 
     System.out.println(Arrays.toString(arr)); 
    } 
+0

ありがとうございました。私はポイントが足りないので+1できません。しかし、もしできれば、私はそうするだろう。あなたのコードはうまく動作します。 – UsefulUserName

1

あなたはArrayList複数回(ArrayListsize()ている回数)を反復意味あなたArrayList以上のネストされた反復を、持っています。

あなただけのループのための単一のものが必要です。

for (int[] arr : result) { 
     System.out.println(Arrays.toString(arr)); 
    } 

または単一whileループ:

Iterator<int[]> it = result.iterator(); 
    while (it.hasNext()) { 
     System.out.println(Arrays.toString(it.next())); 
    } 

両方ではありません。

+0

khAnと同じです。本当にありがとう。 – UsefulUserName

関連する問題