这是我更新学生出勤率的代码。但在执行过程中,此方法会返回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);
}
}
答案 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