2016-05-31 56 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; 
相关问题