2012-03-13 17 views
0

XLSからjdbc sqlを使用してデータを取得しています。私のプログラムは以下の通りです。ArrayListが非常に奇妙に動作する

ケース1:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
c = DriverManager.getConnection("jdbc:odbc:Excel Files", "", ""); 
stmnt = c.createStatement(); 
String query = "select * from [Proficiency$];"; 
ResultSet rs = stmnt.executeQuery(query); 
baseColumnList = new ArrayList(); 
while(rs.next()) { 
    //baseColumnList.add(rs.getString(1)); 
    System.out.println(rs.getString(1)); 
    //System.out.println(baseColumnList); 
} 

出力:

Aadmin 
Badmin 
Badminimage 
batch 
Cadmin 
Dadmin 
Eadmin 
rulesengine 
Fadmin 
genadmin 
Gadmin 
Hdomain-EU 
Padmin 
IAA 

ケース2:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
c = DriverManager.getConnection("jdbc:odbc:Excel Files", "", ""); 
stmnt = c.createStatement(); 
String query = "select * from [Proficiency$];"; 
ResultSet rs = stmnt.executeQuery(query); 
baseColumnList = new ArrayList(); 
while(rs.next()) { 
    baseColumnList.add(rs.getString(1)); 
    System.out.println(baseColumnList); 
} 

出力:

[Aadmin] 
[Aadmin, Badmin] 
[Aadmin, Badmin, Badminimage] 
[Aadmin, Badmin, Badminimage, batch] 
[Aadmin, Badmin, Badminimage, batch, Cadmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine, Fadmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine, Fadmin, genadmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine, Fadmin, genadmin, Gadmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine, Fadmin, genadmin, Gadmin, Hadmin-EU] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine, Fadmin, genadmin, Gadmin, Hadmin-EU, Padmin] 
[Aadmin, Badmin, Badminimage, batch, Cadmin, Dadmin, Eadmin, rulesengine, Fadmin, genadmin, Gadmin, Hadmin-EU, Padmin, IAA] 

なぜarraylistが奇妙に行動しているのか誰にも説明できます。

更新:期待される結果が最初に出力されます。

+4

期待どおりの結果が得られますか?表示される結果があなたのコードから期待されるように見えるので、私はエラーを見ることができません。 – Stmated

+0

はい、あなたが言及している奇妙さは何ですか?ケース1:rs.getString(1)を印刷するだけです。ケース2では、rs.getString(1)をbaseColumnListに追加し、各繰り返しでarrayListのすべての要素を出力します。 – namalfernandolk

+0

arraylistから印刷するときに最初の出力として結果が必要 – developer

答えて

2

この

System.out.println(baseColumnList); 

は、実際のコンテンツリストのを印刷します。結果は全く変わっていません。リストは繰り返しごとに大きくなります。


あなたの最初の例の出力繰り返すために:

while(rs.next()) { 
    baseColumnList.add(rs.getString(1)); 
    System.out.println(baseColumnList.get(baseColumnList.size()-1)); 
} 

をしかし、それはナンセンスです。次のスニペットは、よりエレガントです:

実際 baseColumnList.toString()が呼び出され
while(rs.next()) { 
    String columnValue = rs.getString(1); 
    baseColumnList.add(columnValue); 
    System.out.println(columnValue); 
} 

+0

arraylistを使用して最初の出力として結果を得る方法 – developer

+0

代わりに 'System.out.println(baseColumnList.size() - 1));; ' – MattLBeck

+0

私はArrayListからのみそれを印刷したいと思います。 – developer

0

これはあなたのコードから予想されるようです。私に説明してみましょう:あなたは全体のリストを印刷する2行目で

  • 、リストに値を追加し、最初の行で

    //this line adds a value to the list 
    baseColumnList.add(rs.getString(1)); 
    
    //this line prints the whole list 
    System.out.println(baseColumnList); 
    

    各繰り返しで、リストは1つの要素だけ大きくなり、その後ろに印刷されます。これを防ぐには、リスト全体を印刷しませんが、いくつかの中間値、のような:あなたは「奇妙な」と思われるもの

    //intermediate value 
    String temp= rs.getString(1); 
    //add it to the list 
    baseColumnList.add(temp); 
    //print only the value, and not the whole list 
    System.out.println(temp); 
    
  • +0

    別のことは、どのような出力を期待していますか? – darijan

    +0

    質問を確認してください、私は期待された出力を更新しました – developer

    +0

    (rs.next()) { String temp = rs.getString(1); baseColumnList.add(temp); System.out.println(temp); } – darijan

    1

    イムのでわかりません。 2番目のケースでは、結果セット内のすべての結果に対してbaseColumnList全体を印刷しています。

    System.out.println(baseColumnList); 
    

    あなたはそれが実際には、それはあなたが

    幸運を起こることを期待するものです、あなたのbaseColumnlistにアイテムを追加するので、これは全く不思議ではない続けて見ることができるように!

    0
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    
         c = DriverManager.getConnection("jdbc:odbc:Excel Files", "", ""); 
         stmnt = c.createStatement(); 
         String query = "select * from [Proficiency$];"; 
         ResultSet rs = stmnt.executeQuery(query); 
         baseColumnList = new ArrayList(); 
         while(rs.next()) 
         { 
    
          baseColumnList.add(rs.getString(1)); 
         } 
         for(Object o: baseColumnList) 
         { 
         System.out.println((String)o); 
    
         } 
    
    関連する問題