[英]ArrayList doesn't store all elements from a database in Java
我有以下代碼。 但是,當我運行它時,我在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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.