sql命令未正确结束错误

时间:2016-05-31 15:34:02

标签: java sql sql-update

这是我更新学生出勤率的代码。但在执行过程中,此方法会返回SQL COMMAND NOT PROPERLY ENDED ERROR。

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 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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