2016-05-31 11 views
0

これは学生の出席を更新するためのコードですが、実行中にこのメソッドはSQLコマンドが正しく終了しなかったエラーを返します。 UPDATE文単一引用符でsqlコマンドが正しく終了しなかったエラー

private void updateAttendance(){ 
     MyQuery mq=new MyQuery(); 
     Connection con=mq.getConnection(); 
     Statement st; 
     ResultSet rs; 
     try{ 
      st=con.createStatement(); 
      rs=st.executeQuery("Select STU_ID FROM STUDENT WHERE NAME='"+cmbName.getSelectedItem()+"'"); 
      if(rs.next()){ 
       //System.out.println("getting student name"); 
       int id=rs.getInt("STU_ID"); 
       String sql="UPDATE STUDENT SET SUBJECT='"+cmbSub.getSelectedItem()+"',ATTENDANCE='"; 
       //sql+="ATTENDANCE='"+""; 
       if(rdbtnPresent.isSelected()) 
        sql+= "'"+Atdnc[0]+"',"; 
       else 
        sql+= "'"+Atdnc[1]+"',"; 
       sql+="WHERE STU_ID='"+id+"'"; 
       st.executeUpdate(sql); 
       //cmbName.removeAllItems(); 
      } 

     }catch(SQLException ex){ 
      Logger.getLogger(Student.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 
+2

'sql'値をデバッグして入手できますか? Btw非常に大きなSQLインジェクション警告。パラメータ化された文を使用します。 SQLインジェクションの警告https://xkcd.com/327/ –

答えて

0

2倍の を使用している

String sql="UPDATE STUDENT SET SUBJECT='"+cmbSub.getSelectedItem()+"',ATTENDANCE="; 
if(rdbtnPresent.isSelected()) 
    sql+= "'"+Atdnc[0]+"'"; 
else 
    sql+= "'"+Atdnc[1]+"'"; 
sql+="WHERE STU_ID='"+id+"'"; 

以下'

ATTENDANCE='";から試しを削除私は強く SQL INJECTION

+0

このエラーを取得したコードを編集した後java.sql.SQLSyntaxErrorException:ORA-01747:無効なuser.table.column、table.column、またはカラム指定 –

+0

は表示できますテーブルの詳細? – Sachu

+0

は表 "STUDENT" (\t "STU_ID" NUMBER(10,0)、 \t "NAME" VARCHAR2(20)、 \t "MOBILENO" NUMBER(10,0)を作成し、 \t "EMAIL" VARCHAR2(50) 、 \t "ADDRESS" VARCHAR2(100)、 \t "STREAM" CHAR(50)、 \t "学期" CHAR(50)、 \t "DATE_OF_BIRTH" DATE、 \t "CURRENT_DATE" VARCHAR2(50)、 \t "SUBJECT" VARCHAR2(200)、 \t "出席" VARCHAR2(20)、 \t CONSTRAINT "PK_STU_ID" PRIMARY KEY( "STU_ID")ENABLE ); –

1

削除を避けるために、パラメータ化クエリを使用するrecomment見積もり(')からATTENDANCE='";

Atdnc[0]Atdnc[1]の後にカンマを削除すると、コードにwhere句の前にカンマが挿入されるためです。

stud_idが数字の場合は、idには引用符(')を設定しないでください。 whereの前にスペースがあることを確認してください。 例:返品を確認するためにSQLを印刷することができます。

関連する問題