ORA-01747:java中的user.table.column,table.column或列规范无效

时间:2016-05-31 18:03:33

标签: java mysql oracle11g syntax-error

我收到此错误 - ORA-01747:user.table.column,table.column或列规范

无效

这是我的代码块 -

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");
            System.out.println(id);
            String sql="UPDATE STUDENT SET CURRENT_DATE='"+lblTime.getText()+"',SUBJECT='"+cmbSub.getSelectedItem()+"',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);
    }

}

当我在oracle 11g中执行此查询(UPDATE STUDENT SET CURRENT_DATE ='27th MAY',SUBJECT ='CRYPTOGRAPHY',ATTENDANCE ='ABSENT'WHER STU_ID = '40';)时,它工作正常...但是eclipse中的同一个sql返回错误。

1 个答案:

答案 0 :(得分:1)

你的问题应该在这里:

if (rdbtnPresent.isSelected())
    sql+= "'"+Atdnc[0]+"',"; // --> this should be "'" as there is no more field
else
    sql+= "'"+Atdnc[1]+"'";
sql+="WHERE STU_ID='"+id+"'"; // --> this should start with a space sql+=" WHERE..

所以你有2个问题:

  1. 如果rdbtnPresent.isSelected()返回true,则会出现一个与此无关的逗号
  2. WHERE
  3. 之前没有空格

    NB:请考虑使用PrepareStatement来避免此类问题,以避免必须转义您的值并避免SQL注入攻击。