2016-05-31 71 views
0

這是我的代碼來更新學生attendance.But在執行期間此方法返回SQL COMMAND NOT PROPERLY ENDED ERROR。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

在update語句中的單引號使用兩次 從刪除'ATTENDANCE='";

試試下面

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

我強烈電子書籍使用參數化查詢,以避免SQL INJECTION

+0

編輯代碼後得到此錯誤 - java.sql.SQLSyntaxErrorException:ORA-01747:無效的user.table.column,table.column或列規範 –

+0

可以顯示錶細節? – Sachu

+0

CREATE TABLE 「學生」 (\t 「STU_ID」 NUMBER(10,0), \t 「NAME」 VARCHAR2(20), \t 「MOBILENO」 NUMBER(10,0), \t 「電子郵件」 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「ATTENDANCE」VARCHAR2(20),約束「PK_STU_ID」主鍵(「STU_ID」)ENABLE ); –

1

刪除報價(')從ATTENDANCE='";

Atdnc[0]Atdnc[1]之後刪除逗號,因爲您的代碼在where子句之前放置了逗號。

如果stud_id是一個數字,則不應將id設置爲引用(')。 確保在where之前有空格。 一個例子(你可以打印你的SQL看到恢復原狀):

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