2016-03-29 8 views
-1

ユーザーが入力した値を使用してデータベースからデータを取得したいとします。値はuidという名前の配列に格納されます。コードはコンパイルされていますが、結果は印刷されません。確かに準備された文を使用したSELECTクエリとユーザーから取得した値の設定

public static void main(String[] args) { 

Connection conn = null; 

PreparedStatement stmt = null; 
ResultSet rs=null; 
try{ 
    Class.forName("com.mysql.jdbc.Driver"); 
    conn = DriverManager.getConnection(DB_URL,USER,PASS); 
    String sql1="SELECT * FROM user_ratings WHERE user_id = ?"; 
    stmt = conn.prepareStatement(sql1); 
    for (int i:uid) 
    { 
    stmt.clearParameters(); 
    stmt.setInt(1,uid[i]); 

    rs=stmt.executeQuery(); 
    while(rs.next()) 
    { 
    int id = rs.getInt("user_id"); 
    int mid = rs.getInt("movie_id"); 
    int first = rs.getInt("movie_rating"); 
    int second = rs.getInt("acting"); 
    int third = rs.getInt("visuals"); 
    System.out.print("User ID: " +id); 
    System.out.print(", Movie ID: " +mid); 
    System.out.print(", First: " +first); 
    System.out.println(", Second: " +second); 
    System.out.println(", Third:" +third); 
    } 
    } 
    } 
+0

あなたは本当にuidに値がありますか? uidの長さを確認してください。 – antorqs

+0

コードをデバッグしましたか?クエリ結果はありますか? – Breeze

+0

uidの値は次のとおりです。 uid = {3,4,12,13,14,17,19,20,21,24}; – Aparna

答えて

3

あなたの声明stmt.setInt(1,uid[i]);stmt.setInt(1,i);をお読みください。

既にiteratingですか? uidアレイであり、for (int i:uid)を使用しているため、iによって順番に各値を使用できます。

+0

それを試してみてください。それでも結果は得られなかった。 – Aparna

+0

エラーが発生していませんか?そして、デバッガは疑わしいものを明らかにしませんか?それから私は無制限のクエリを試してみよう: 'SELECT * FROM user_ratings'。これがテーブルデータを返す場合は、定数式 'SELECT * FROM user_ratings WHERE user_id = 3'を試してみてください。最初に失敗した場合は、アクセスに関連するもの(USER、PASS、USERの特権など)をチェックしてください。 seondチェックが動作することが判明した場合は、準備された 'setInt()'でどの値が使われているかをチェックしてください(しかし、デバッガセッションからはこれを見ているは​​ずです)。 – rpy

+0

ありがとうございます。 2番目の点検は私が問題を見つけるのを助けました。 executeQuery()でパラメータを渡す必要はありませんでした。 – Aparna

関連する問題