2016-03-23 15 views
1

次のコードがあり、user_entered_student_idが既存のuser_idと同じであることを確認します。どのように私はuser_entered_student_idにすべてのuser_idを比較することができますSQLステートメントを介して?SQL選択文とユーザー入力値の比較

System.out.println("\nSign Up For a Class\n"); 
try { 

    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ClassSelector?autoReconnect=true&useSSL=false", "root", "Volks91!"); 

    System.out.println("Enter Student ID: "); 
    user_entered_student_id = sc.nextLine(); 
    String selectClassId = "SELECT class_id FROM ClassSelector.classes"; 
    myStmt = con.prepareStatement(selectClassId); 
    rs = myStmt.executeQuery(selectClassId); 
    while (rs.next()) { 

     if (selectClassId.equals(user_entered_student_id)) { 
      System.out.println("This is not a valid User ID"); 
     } 

     else { 
      String selectStudentFromIdQuery = ("SELECT student_name FROM ClassSelector.students WHERE student_id = " + user_entered_student_id); 
      myStmt = con.prepareStatement(selectStudentFromIdQuery); 
      rs = myStmt.executeQuery(selectStudentFromIdQuery); 
      while (rs.next()) { 
       userEnterIdAsName = rs.getString("student_name"); 
       System.out.println("Is " + userEnterIdAsName + " the correct student? (Y/N)"); 
       String confirm = sc.nextLine(); 

       if (confirm.equalsIgnoreCase("Y")) { 
        addClass(); 

       } else if (confirm.equalsIgnoreCase("N")) { 
        System.out.println("Oops, let start over"); 
        return; 
       } 
      } 
     } 
    } 
} catch (java.sql.SQLException SQL) { 
    SQL.printStackTrace(); 
} 

}

+2

あなたはすでにクエリ自体でこれを行っていますか?あなたは[SQLインジェクション攻撃](http://bobby-tables.com)に脆弱であることに注意してください。 –

+0

現在、ユーザが存在しないIDを入力した場合、アプリケーションが終了します。 user_entered_student_idが実際の生徒ではないというメッセージが表示されます。 –

+0

私はコードを再フォーマットしましたが、それでもまだ動作していません。私が間違っていることは何ですか? –

答えて

0

アプリを閉じた理由は、あなたのelseブロックにクエリが存在しない生徒のために何も返さないので、何もwhile (rs.next())...

にループされていないとして、最初のチェックを実行することを検討するということです結果セットのnext()は、データが空の場合にfalseを返します。 SQLのパラメータ化(SQLインジェクションからの保護)の使用にも注意してください。さらに、結果セットをスクロールして、既存の生徒のためにループする準備ができたら、スクロール可能にします。

String selectStudentFromIdQuery = ("SELECT student_name FROM ClassSelector.students " + 
            "WHERE student_id = ?"); 

myStmt = con.prepareStatement(selectStudentFromIdQuery, 
           ResultSet.TYPE_SCROLL_INSENSITIVE); 
myStmt.setInt(1, user_entered_student_id); 
rs = myStmt.executeQuery(); 

if (!rs.next()) { 
    System.out.println("Not an actual student"); 
} 
rs.beforeFirst(); 
while (rs.next()){  
    userEnterIdAsName = rs.getString("student_name"); 
    ... 
} 
関連する問題