2016-10-12 26 views
0

私はJavaアプレットとJava Swingを初めて使用しています。すでに似たような質問をしたが、それほど助けにならなかった。ログインボタンがクリックされると、tryブロックを実行する代わりに例外がスローされます。他のすべてがうまくいきます。java.sql.SQLSyntaxErrorException:ORA-00933:SQLコマンドが正しく終了しませんでしたか?

public class signin extends javax.swing.JFrame { 

    Connection conn; 

OracleResultSet rs = null; 
OraclePreparedStatement pst; 


private void cancelActionPerformed(java.awt.event.ActionEvent evt) {          
signin s = new signin(); 
s.setVisible(true); 
}          

ログインボタンの例外をクリックすると、新しいフレーム、メニューに行くのではなく、例外がスローされます。 tryブロックの

private void loginActionPerformed(java.awt.event.ActionEvent evt) {          


    try{ 

    String pass = passTF.getText().trim(); 
    String user = userTF.getText().trim(); 
    String sql = "select uname,pass from login where uname = '"+user+"' pass 
    = '"+pass+"'"; //here is the issue 

    pst = (OraclePreparedStatement) conn.prepareStatement(sql); 
    rs = (OracleResultSet) pst.executeQuery(sql); 
    System.out.println("Error"); 
    int count = 0; 

残りは

while (rs.next()) 
    { 
     count++; 

    } 
    if(count == 1) 
    { 
     JOptionPane.showMessageDialog(null, "User Found"); 
     System.out.println("Success"); 
     menu m = new menu(); 
      m.setVisible(true); 
    } 

    else 
    { 
     System.out.println("Success but no user"); 
    JOptionPane.showMessageDialog(null, "Such user does not exist!"); 
    } 

    } 
    catch(Exception ex) 
    { 
      System.out.println("Fail"); 
    } 

}          

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new signin().setVisible(true); 
     } 
    }); 
} 
+0

パスフィールドの前に「AND」がありません。また、プリペアド・ステートメントを使用しているため、適切に使用してください(https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)。 – parakmiakos

答えて

0

が無効なselect文を持って、このコード:

"select uname,pass from login where uname = '"+user+"' pass= '"+pass+"'" 

はこのようにされている必要があります:

"select uname,pass from login where uname = '"+user+"' and pass= '"+pass+"'" 

。なお、あなたは行方不明だったandwhere句。

また、PreparedStatementを使用する代わりに、これらの種類のクエリを避ける必要があります。現在、コードはSQLインジェクション攻撃に対して脆弱です。

関連する問題