gpt4 book ai didi

java - Java 中的 ArrayList 并不存储数据库中的所有元素

转载 作者:行者123 更新时间:2023-11-30 01:42:44 24 4
gpt4 key购买 nike

我有以下代码。但是,当我运行它时,我在 JTextArea 中看不到数据库中的所有元素,只看到最后一个元素。但是,如果我打印出在 while 循环中从数据库中读取的内容,我会得到所有这些内容,所以我猜问题出在对象列表上。有什么建议可以解决这个问题吗?

public class Muzica {
static ArrayList <Melodii> lista=new ArrayList<Melodii>();
static class Melodii
{
private String melodie;
private String artist;
private int an;
public String getMelodie() {
return melodie;
}
public void setMelodie(String melodie) {
this.melodie = melodie;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public int getAn() {
return an;
}
public void setAn(int an) {
this.an = an;
}

public Melodii(String melodie, String artist, int an)
{
this.melodie=melodie;
this.artist=artist;
this.an=an;
}

public String toString()
{
return "Melodie: "+melodie+" Artist: "+artist+" An aparitie: "+an;
}
}

public static void main(String[] args) throws SQLException {
String url="jdbc:mysql://localhost:3306/test";
Connection con = DriverManager.getConnection(url, "root", "root");
Statement sql;
sql=(Statement) con.createStatement();
ResultSet rs;
rs=sql.executeQuery("select * from melodie");
JFrame f=new JFrame("Melodii");
f.setSize(300, 300);
f.setLayout(new BorderLayout());
JTextArea t=new JTextArea();
JButton b=new JButton("Stergere");
b.setSize(30, 20);

while(rs.next())
{

System.out.println(rs.getString("melodie")+rs.getString("artist")+rs.getInt("an"));
Melodii m=new Melodii(rs.getString("melodie"), rs.getString("artist"), rs.getInt("an"));
lista.add(m);
for(int i=0; i<lista.size();i++)
{
t.setText(m.toString());
}
}


f.add(t, BorderLayout.CENTER);
f.add(b, BorderLayout.SOUTH);
f.setVisible(true);

}

}

最佳答案

您的代码中的问题是这部分:

while(rs.next()) {
System.out.println(rs.getString("melodie") + rs.getString("artist") + rs.getInt("an"));
Melodii m = new Melodii(rs.getString("melodie"), rs.getString("artist"), rs.getInt("an"));
lista.add(m);

for (int i = 0; i < lista.size(); i++) {
t.setText(m.toString());
}
}

您正在创建一个 Melodii 并将其添加到 lista 中,但随后您循环遍历 lista 并覆盖之前在其中设置的文本。

我建议在 ResultSet 尚未完全迭代时不要循环遍历整个列表。将 for 循环移至 while 循环下方,并应用 append(m.toString()) 而不是 setText(m.toString( )),如

while(rs.next()) {
System.out.println(rs.getString("melodie") + rs.getString("artist") + rs.getInt("an"));
Melodii m = new Melodii(rs.getString("melodie"), rs.getString("artist"), rs.getInt("an"));
// just store all the results from the database, no need to iterate it at this point
lista.add(m);
}
// instead, iterate the list afterwards and append the text
for (int i = 0; i < lista.size(); i++) {
t.append(m.toString());
}

关于java - Java 中的 ArrayList 并不存储数据库中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59374537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com