2017-05-30 20 views
0

私は少しのプロジェクトに取り組んでいますが、今は問題があります。同じジャンルのすべての映画をデータベースで検索する必要があります。私はこのためにこの関数を書いたが、うまく機能しない。原則として、見つかった各結果に対して、ムービーという名前の新しいオブジェクトを作成して返すことが必要です。私は私の機能をテストしましたが、私は同じ髪型の2枚の映画を持っています。そして私の質問は、なぜ私にすべてのオブジェクトを返さないのですか?彼はすべての私のオブジェクトを返す必要があります。Java JDBC選択レコード

public Movie extraction(String Genre)throws SQLException{ 
    Statement stmt=con.createStatement(); 
    ResultSet rs=stmt.executeQuery("select * from movies where genre='"+Genre+"'"); 
    while(rs.next()){ 
     String name=rs.getString("name"); 
     String genre=rs.getString("genre"); 
     int year=rs.getInt("year"); 
     int metascore=rs.getInt("metascore"); 
     System.out.println(name); 
     return new Movie(name,genre,year,metascore); 
    } 
    return null; 
} 
+2

あなたはループ内で 'return'を使用していますので、最初の繰り返しで終了します。オブジェクトをリストに追加し、ループの後にリストを返します。 – Berger

+0

あなた自身に恩恵を与え、PreparedStatementについて学んでください。あなたはSELECT *をしてはいけません。あなたが望む列を記入してください。 – duffymo

答えて

3

ここでの問題は、あなたループ内returnの代わりにListに結果を追加し、ループが完了したときにそのリストを返すということです。

あなたの問題に関連していないが、将来的に問題を作成することができ、コードと他のいくつかの問題があります。

  1. あなたが声明と結果セットを作成し、決してそれらを閉じます。
  2. 文字列連結を使用して、PreparedStatementの代わりにクエリを生成しています。文字列Genereが信頼できないユーザー(Webアプリケーションなど)から受け取られた場合、そのユーザーはSQLインジェクションを使用してクエリを自分が望むものに変換できます。

よりよい解決策(警告:テストされていない)は、以下のようなものです:

List<Movie> movies = new ArrayList<>(); 

try(PreparedStatement stmt= con.prepareStament("select * from movies where genre=?")) { 
    stmt.setString(1, Genere); 
    try(ResultSet rs = stmt.executeQuery()) { 
    while(rs.next()){ 
     String name=rs.getString("name"); 
     String genre=rs.getString("genre"); 
     int year=rs.getInt("year"); 
     int metascore=rs.getInt("metascore"); 
     movies.add(new Movie(name,genre,year,metascore)); 
    } 
    } 
} 
return movies; 

(「リソースとしてみてください」と呼ばれる)tryのステートメントは、ステートメントおよび結果セット.closeメソッドが呼び出されたときにされることが保証されますブロックは終了する。

+0

しかし、自分のリストの中に自分の関数を追加したくないので、すべてのオブジェクトを返すだけです。あなたが言ったように私が初めてしたからです。そして、今私は別のアプローチが必要です。 – Eratys

+0

すべてのオブジェクトを返す唯一の方法は、それらをいくつかのコンテナ(コレクションクラス - リスト、セットなど)に配置することです。 – nimrodm

+0

もっと可能性があると思いました。 – Eratys

関連する問題