2016-05-30 25 views
1

Ich habe zwei Klassen - eine Klasse als Bean für "Movies" und eine Klasse für den Umgang mit der Datenbank.Daten werden nicht in ArrayList gespeichert

Das Problem, das ich habe, ist beim Versuch, die Daten von der Datenbank zu erhalten. Wie Sie in meinem Code sehen können, füge ich das Resultset in eine Linkedlist ein, was der Parameter "Movies" ist, so dass ich das gewünschte Objekt leicht erhalten kann.

Das Problem, das ich habe, ist, dass, wenn ich versuche, ein bestimmtes Objekt aus der Linkedlist zu drucken, es immer der letzte Wert der Datenbank ist und es nicht alle "Movienames" ausdruckt. Es scheint so, als ob die set-Methode in der while-Schleife bis zum letzten Wert überschrieben wird, und das wird gespeichert. Das ist seltsam, denn nach dem SetValue in der While-Schleife speichere ich es sofort in der Datenbank.

Warum gibt es mir nicht alle Werte in der Datenbank und wie kann ich das beheben? Danke!

My bean:

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

My Datenbankklasse:

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


     } 
    } 

} 

Antwort

6

erstellen Movies Objekt innerhalb des while loop:

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

     } 

als Nebenknoten: Movie ist eine bessere Namensgebung nicht Movies.

Verwenden Sie außerdem PreparedStatment: sql = "INSERT INTO movies (id, imagepath, mediapath, moviename) VALUES (null, ?, ?,?)"; zu verhindern SQL Injection Attacks.

last but not least: "app" ist ein wirklich schwaches Passwort :-)

Verwandte Themen