2016-05-31 138 views
1

我得到這個錯誤 - ORA-01747規格:無效user.table.column,TABLE.COLUMN,或列規格ORA-01747:無效user.table.column,TABLE.COLUMN,或列中的Java

這是我的代碼 -

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); 
    } 

} 

當我執行這個查詢(UPDATE STUDENT SET CURRENT_DATE = '5月27日',SUBJECT = '密碼術',考勤= '缺席' WHERE STU_ID = '40塊';)在oracle 11g中,它工作正常......但在Eclipse中相同的SQL返回錯誤。

+0

「STUDENT」表在哪個'schema'中?說它是學校,嘗試運行:'從school.STUDENT選擇STU_ID ...' – alfasin

+0

我認爲這個問題是在更新查詢中,因爲select語句給了我正確的結果。我的意思是id。 –

+0

您是否在執行它之前打印了查詢,並確保它看起來像您認爲的樣子? – alfasin

回答

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

NB:請考慮使用PrepareStatement來避免此類問題,以避免必須轉義您的值並避免SQL注入攻擊。