java - ArrayList 的行为非常奇怪

标签 java jdbc arraylist

我正在使用jdbc sqlXLS表中检索数据。下面是我的程序。

案例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/

相关文章:

jdbc - Google Apps Script JDBC 连接问题

java - 比较两个arrayList,得到最长的匹配String

java - 交叉不同类型的集合

java - 仅当最后在数组中输入负数时,程序才有效

java - 如何使用 JDBC 连接到远程数据库?

java - 为我正在使用的每个项目创建 Spring @Repository 和 @Controller (来自数据库)

java - 如何返回 DocumentSnapShot 作为方法的结果?

java - 第一个选项的下拉选定值默认值

java - Arraylist 打印修剪或分割字符串

java - 如何通过(选项卡)读取csv文件并通过java将文件存储到arraylist