2016-05-30 16 views
1

私は2つのクラスを持っています.1つは "Movies"のBean、もう1つはデータベースを扱うクラスです。データがArrayListに保存されていません

私が持っている問題は、データベースからデータを受け取ろうとするときです。あなたが私のコードで見ることができるように、結果セットをリンクリストに追加しています。これはパラメータ "Movies"ですので、必要な特定のオブジェクトを簡単に取得できます。

リンクリストから特定のオブジェクトを印刷しようとすると、常にデータベースの最後の値になり、すべての「movienames」が表示されなくなります。 whileループのsetメソッドが最後の値まで上書きされていて、それが保存されているようです。 whileループのsetValueの後、すぐにデータベースに保存するので、これは変です。

なぜ私はデータベースのすべての値を与えてくれないのですが、どうすればこの問題を解決できますか? ありがとう!

マイ豆:

import java.io.Serializable; 
import javax.persistence.*; 

/** 
* Entity implementation class for Entity: Movies 
* 
*/ 
@Entity 
public class Movies implements Serializable { 


    private static final long serialVersionUID = 1L; 

    public Movies() { 
     super(); 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 


    public String getImagepath() { 
     return imagepath; 
    } 

    public void setImagepath(String imagepath) { 
     this.imagepath = imagepath; 
    } 

    private String moviename, movieinfo, mediapath, imagepath; 

    public String getMediapath() { 
     return mediapath; 
    } 

    public void setMediapath(String mediapath) { 
     this.mediapath = mediapath; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getMoviename() { 
     return moviename; 
    } 

    public void setMoviename(String moviename) { 
     this.moviename = moviename; 
    } 

    public String getMovieinfo() { 
     return movieinfo; 
    } 

    public void setMovieinfo(String movieinfo) { 
     this.movieinfo = movieinfo; 
    } 
} 

マイデータベースクラス:側ノードとして

while (rs.next()){ 
     Movies m = new Movies(); 
     m.setImagepath(rs.getString("imagepath")); 
     m.setMoviename(rs.getString("moviename")); 
     m.setMediapath(rs.getString("mediapath")); 
     data.add(m); 

     } 

Movieが良いネーミングある

package JDBC; 
import java.sql.*; 
import java.util.ArrayList; 

import com.commerce.models.Movies; 

public class MovieService2 { 

    // 

     static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 


     static Connection conn = null; 
     static Statement stmt = null;  

    public void insertData (String imagepath,String mediapath, String moviename) throws Exception{ 
      conn = DriverManager.getConnection("jdbc:mysql://192.168.51.123:3306/movies","app","app"); 

      stmt = conn.createStatement(); 
      String sql; 
      sql = "INSERT INTO movies (id, imagepath, mediapath, moviename) VALUES (null, '"+imagepath+"', '"+mediapath+"','"+moviename+"')"; 
      stmt.executeUpdate(sql); 

    } 
    public static ArrayList<Movies> getData() throws Exception{ 
      System.out.println("Connecting to database..."); 

      Movies m = new Movies(); 
      ArrayList <Movies> data = new ArrayList <Movies>(); 
      conn = DriverManager.getConnection("jdbc:mysql://192.168.51.123:3306/movies","app","app"); 

      System.out.println("Creating statement..."); 
      stmt = conn.createStatement(); 
      String sql; 
      sql = "SELECT * from movies"; 
      ResultSet rs = stmt.executeQuery(sql); 

      while (rs.next()){ 
      m.setImagepath(rs.getString("imagepath")); 
      m.setMoviename(rs.getString("moviename")); 
      m.setMediapath(rs.getString("mediapath")); 
      data.add(m); 

      } 

      System.out.println (data.get(0).getMoviename()); 

      return data; 

    } 

    public static void main (String [] args) throws Exception{ 
     ArrayList <Movies> data = getData(); 
     for (int i = 0; i < data.size(); i++){ 
      //System.out.println("hej: " + getData().get(0).getMoviename()); 


     } 
    } 

} 

答えて

6

whileループ内Moviesオブジェクトを作成しますいいえ。Movies

さらに、PreparedStatment:sql = "INSERT INTO movies (id, imagepath, mediapath, moviename) VALUES (null, ?, ?,?)"; を使用してSQL Injection Attacksを防ぐ。

最後に重要です:"app"は本当に弱いパスワードです:-)

関連する問題