有没有一种方法可以在表格列表中建立列表?

时间:2020-04-14 04:33:39

标签: java mysql sql

这是我尝试过的代码:

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列表中进行自我更新。有没有办法使它不这样做?

3 个答案:

答案 0 :(得分:2)

我认为您的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。这就是为什么所有迭代后输出都相同的原因。

答案 1 :(得分:1)

实际上,您正在替换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));
}

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

您将获得预期的结果。

答案 2 :(得分:1)

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

布尔值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 );       
    }