2016-05-31 9 views
0

Dies ist mein Code, um die Anwesenheit von Schülern zu aktualisieren. Während der Ausführung gibt diese Methode jedoch SQL COMMAND NOT PROPERTY ENDED ERROR zurück.sql Befehl nicht ordnungsgemäß beendet Fehler

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

Können Sie debuggen den 'sql' Wert und zeigen Sie uns, was Sie bekommen? Btw sehr große SQL-Injektion Warnung. Verwenden Sie eine parametrisierte Anweisung. Sql Injection Warnung https://xkcd.com/327/ –

Antwort

0

In Aktualisierungsanweisung einfache Anführungszeichen verwenden zweimal entfernen ' von ATTENDANCE='";

Versuch unter

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

I recomment zu stark parametrisierte Abfrage verwenden das zu vermeiden SQL INJECTION

+0

Nach der Bearbeitung des Codes bekommen diese Fehler-java.sql.SQLSyntaxErrorException: ORA-01747: ungültige user.table.column, table.column oder Spalte Spezifikation –

+0

können Sie zeigen die Tischdetails? – Sachu

+0

TABLE "Student" (\t "STU_ID" NUMBER (10,0) CREATE, \t "NAME" VARCHAR2 (20), \t "MOBILENO" NUMBER (10,0), \t "Email" VARCHAR2 (50) , \t "ADDRESS" VARCHAR2 (100), \t "STREAM" CHAR (50), \t "SEMESTER" CHAR (50), \t "DATE_OF_BIRTH" DATE, \t "CURRENT_DATE" VARCHAR2 (50), \t "SUBJECT" VARCHAR2 (200), \t "ANWESENHEIT" VARCHAR2 (20), \t CONSTRAINT "PK_STU_ID" PRIMÄRSCHLÜSSEL ("STU_ID") ENABLE ); –

1

entfernen Zitat (') von ATTENDANCE='";

Entfernen Sie das Komma nach Atdnc[0] und Atdnc[1], weil Ihr Code ein Komma vor where Klausel setzt.

Wenn stud_id eine Nummer ist, sollten Sie id nicht mit einem Angebot (') festlegen. Stellen Sie sicher, dass vor where ein Leerzeichen vorhanden ist. Ein Beispiel (Sie können Ihre SQL zu sehen Restitution in Druckbuchstaben):

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