我正在使用jdbc sql从XLS表中检索数据。下面是我的程序。
案例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 的行为很奇怪。
更新:预期结果是第一个输出。
最佳答案
这个
System.out.println(baseColumnList);
打印列表的实际内容1。结果一点也不奇怪。每次迭代该列表都会变得更大。
<小时/>要重复第一个示例的输出:
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);
}
<小时/>
1 实际上调用了baseColumnList.toString()
。
关于java - ArrayList 的行为非常奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680860/