【问题标题】:What is the proper way to store a String array in an ArrayList?将字符串数组存储在 ArrayList 中的正确方法是什么?
【发布时间】:2015-05-07 10:44:28
【问题描述】:

我有一个从数据库中选择数据然后尝试将其存储在 ArrayList 中的函数。 我想先将 ResultSet 中的每个单独的列存储在 String 数组中,然后将数组添加到 ArrayList 中。

    public void buildConnection() throws SQLException,ClassNotFoundException
{
    Class.forName("com.mysql.jdbc.Driver");
    Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    Statement statement =connection.createStatement();
    ResultSet rSet=statement.executeQuery("select * from details");
    ResultSetMetaData rSetMd=rSet.getMetaData();
    int ColumnsNo=rSetMd.getColumnCount();
    ArrayList<String[]> arrMatrix=new ArrayList<String[]>();
    int j=0;
    while(rSet.next()){
        String arrRows[] = new String[ColumnsNo];
        for(int i=1;i<=ColumnsNo;i++){
            arrRows[i-1]=rSet.getString(i);
        }
        arrMatrix.add(j,arrRows);
        j++;
    }
    System.out.println(arrMatrix.get(0)[0]+" "+arrMatrix.get(0)[1]+" "+arrMatrix.get(0)[2]);
    System.out.println(arrMatrix.get(1)[0]+" "+arrMatrix.get(1)[1]+" "+arrMatrix.get(1)[2]);

}

问题是只有数据库中的最后一个条目出现在数组列表中。所有其他条目都丢失了。请告诉我我做错了什么。

更新: 输出:

 1 Axel Namek
 1 Axel Namek

在我的数据库中,这个条目是最后一个

【问题讨论】:

  • 你试过调试循环中发生的事情吗?
  • 只需使用arrMatrix.add(arrRows) 并摆脱j。虽然我不认为这是错误的根源,但这是不必要的复杂性。
  • arrMatrix.add(arrRows) 做同样的事情。实际上这是我以前使用的。然后我得到了那个错误,所以我把它改成了上面的代码。但仍然是一样的。
  • 你能发布你得到的输出吗?您的数据库中有多少行?这两行都打印同样的东西吗?
  • 哎呀我搞砸了输出它实际上是一个两行输出。无论我打印多少次它总是一样的。

标签: java arraylist resultset


【解决方案1】:

我会使用;

ArrayList&lt;ArrayList&lt;String&gt;&gt; 代替 ArrayList&lt;String[]&gt;。

使用此方法,您就可以;

ArrayList<ArrayList<String>> arrMatrix = new ArrayList<ArrayList<String>>();
arrMatrix.add(new ArrayList<String>());
arrMatrix.get(0).add("string value");
System.out.println(arrMatrix.get(0).get(0));
//string value

不过,我怀疑这也不是你想要的。更好的方法是创建一个包含名字和姓氏字段的新类并引用这些

public class Names {
    public String firstname = null;
    public String surname = null;
    public Names(String first, String sur) {
        firstname = first;
        surname = sur;
    }
}

从那时起;

Names instance = new Names("John", "Doe");
System.out.println(instance.firstname); // John
System.out.println(instance.surname); // Doe

在这一点上创建一个名称数组列表是微不足道的。显然,这个例子可以建立在更多的基础之上。

我质疑你的潜在动机,你必须对数组做其他事情,否则你只会在循环中打印它。

【讨论】:

  • 这应该是一条评论。
  • 在这种情况下,如何将元素添加到内部 ArrayList?
猜你喜欢
  • 2019-01-11
  • 2014-03-18
  • 2018-06-25
  • 2016-01-03
  • 2014-04-12
  • 2011-05-29
  • 2019-02-26
  • 2020-12-02
  • 2016-02-18
相关资源
最近更新 更多