ArrayListには、Javaでデータベースからすべての要素を格納していません

クリスティーナMorote:

私は、次のコードを持っています。しかし、私はそれを実行したとき、私はで表示されていないJTextArea、私のデータベース内にあるすべての要素、ちょうど最後の1。私はこの問題は、オブジェクトのリストであると思いますので、しかし、私は、私はその中で、データベースから読んだプリントアウトした場合にループしながら、私は、それらのすべてを取得します。私はこの問題を解決する方法の任意の提案ですか?

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);

    }

}
deHaar:

あなたのコード内の問題は、この部分です。

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());
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=363701&siteId=1