【问题标题】:Is there a way to make a list in a list from a table?有没有办法从表格中列出列表?
【发布时间】:2020-04-14 04:33:39
【问题描述】:

这是我尝试过的代码:

ArrayList<ArrayList<String>> select = new ArrayList<ArrayList<String>>();
ArrayList<String> selectin = new ArrayList<String>();
ResultSet lihat = st.executeQuery("select * from usersss");
        while (lihat.next()){
            selectin.set(0, lihat.getString("user"));
            selectin.set(1, lihat.getString("password"));
            selectin.set(2, lihat.getString("email"));
            select.add(selectin);       
        }

for (int i = 0; i<select.size();i++) {
            System.out.println(select.get(i));
        }

这是结果:

[kursi, meja, kursi@gmail.com]
[kursi, meja, kursi@gmail.com]
[kursi, meja, kursi@gmail.com]
[kursi, meja, kursi@gmail.com]

这是想要的结果(实际表格):

[paosp,skajs,paosp@gmail.com]
[fisd,mole,fisd@gmail.com]
[trem,olo,trem@gmail.com]
[kursi,meja,kursi@gmail.com]

似乎selectin 列表在select 列表中自我更新。有没有办法让它不这样做?

【问题讨论】:

  • 把下面的语句 ArrayList selectin = new ArrayList();在while循环内。由于您使用的是相同的数组列表,因此它会被更新的值覆盖。

标签: java mysql sql


【解决方案1】:

我认为你的 while 循环应该是

    while (lihat.next() ) {
        selectin = new ArrayList<>();
        selectin.add( lihat.getString("user") );
        selectin.add( lihat.getString("password") );
        selectin.add( lihat.getString("email") );
        select.add( selectin );       
    }

由于是引用传递,第二次迭代更新第一次添加的arraylist。这就是为什么在所有迭代之后输出都相同的原因。

【讨论】:

    【解决方案2】:

    您实际上是在替换 selectin 变量的同一引用中的值。而select 变量只包含单个引用selectin 多次。

    select 中的每个新元素创建一个新的 ArrayList,如下所示:

    ArrayList<ArrayList<String>> select = new ArrayList<ArrayList<String>>();
    ResultSet lihat = st.executeQuery("select * from usersss");
    
    while (lihat.next()){
        ArrayList<String> selectin = new ArrayList<String>();
        selectin.add(lihat.getString("user"));
        selectin.add(lihat.getString("password"));
        selectin.add(lihat.getString("email"));
        select.add(selectin);       
    }
    
    for (int i = 0; i<select.size();i++) {
        System.out.println(select.get(i));
    }
    

    这将创建一个新的 ArrayList 对象,并在每次 while 循环运行时创建。

    你会得到你预期的结果。

    【讨论】:

      【解决方案3】:

      java.util.ArrayList类的set()方法用于将该列表中指定位置的元素替换为指定元素。

      boolean add(Object o):此方法用于将特定元素附加到列表的末尾。

      您应该在循环中将set() 替换为add()

      while (lihat.next() ) {
              selectin = new ArrayList<>();
              selectin.add( lihat.getString("user") );
              selectin.add( lihat.getString("password") );
              selectin.add( lihat.getString("email") );
              select.add( selectin );       
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2015-08-19
        • 2019-04-24
        • 1970-01-01
        相关资源
        最近更新 更多