2012-03-13 151 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 2012-03-13 08:57:59

+0

是,什麼是你提的陌生感,案例1:你剛剛打印rs.getString(1)。而在個案2您已經添加rs.getString(1)至baseColumnList和打印在每個迭代ArrayList中的所有元素。 – namalfernandolk 2012-03-13 09:02:34

+0

從arraylist打印時,我需要結果作爲第一個輸出 – developer 2012-03-13 09:04:15

回答

2

System.out.println(baseColumnList); 

打印的實際內容列表。結果並不奇怪。這個列表在每次迭代中都會變得更大。


重複你的第一個例子的輸出:

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

但是,這是無稽之談。下面的代碼片段更優雅:

while(rs.next()) { 
    String columnValue = rs.getString(1); 
    baseColumnList.add(columnValue); 
    System.out.println(columnValue); 
} 

其實baseColumnList.toString()被調用。

+0

我怎樣才能得到結果作爲第一個輸出使用arraylist – developer 2012-03-13 09:00:57

+0

而不是使用'System.out.println(baseColumnList.get(baseColumnList.size() - 1));' – MattLBeck 2012-03-13 09:03:06

+0

但我只想從ArrayList打印它。不採取其他字符串元素並打印它。 – developer 2012-03-13 09:09:20

0

從代碼中看來這似乎是預料之中的。讓我來解釋:

//this line adds a value to the list 
baseColumnList.add(rs.getString(1)); 

//this line prints the whole list 
System.out.println(baseColumnList); 
  • 在您添加值到列表中的第一行,
  • 在你打印整個列表中的第二條線。

在每次迭代中,列表都會增加一個元素,並在其後面打印。爲了防止這種情況,不要打印整個列表,但一些中間值,如:

//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 2012-03-13 09:00:52

+0

請檢查的問題,我已經更新了預期輸出 – developer 2012-03-13 09:02:09

+0

而(rs.next()){ 字符串 溫度= rs.getString(1); baseColumnList.add(temp); System.out.println(temp); } – darijan 2012-03-13 09:17:42

1

林不知道你覺得是什麼'奇怪'。 在第二種情況下,您要爲結果集中的每個結果打印整個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); 

     }