2012-02-10 2 views
1

Netbeans를 사용하여 테이블의 필드를 업데이트하려고하는데 두 가지 조건이 있습니다.Java의 SQL 업데이트 문

String sql1 = "update tbl_log set Logout_Time =? where Firstname = ? and Check = ?"; 
     try{ 
      pst = conn.prepareStatement(sql1); 
      pst.setString(1, time); 
      pst.setString(2, username); 
      pst.setString(3, "IN"); 
      pst.execute(); 
     }catch(Exception e){ 
      JOptionPane.showMessageDialog(null, e); 
     } 

을하지만, 나는 다음과 같은 오류가 점점 오전 :

com.mysql.jdbc.exceptions.jdbc4.MySQL SyntaxErrorException을 다음과 같이 업데이트 문은 당신은 당신의 SQL 구문에 오류가 있습니다; 귀하의 MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문이 1 행에서 'Check ='IN '근처에서 사용되는지 확인하십시오.

어떻게 해결할 수 있습니까?

+1

'시간'은 실제로 데이터베이스의 문자열 필드입니까? –

+0

@ Jon 's의 부가 기능 질문 : 왜 시간을 문자열에 저장하고 있습니까? ': (' –

답변

6

는 "확인"을하지 않을 경우 예약 된 단어이며, 단어 : 여기를 참조하십시오 : http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

+0

@PeekaySwitch 예, 역주 ...이 대답 읽기 –

+0

그것은 Time_Logout 필드를 업데이트하지 않습니다. .. :( – Ravi77

+1

@ Ravi77. Logout_Time을 업데이트하는 데 문제가 있으면 해당 열에 잘못된 데이터 형식을 사용하고있는 것 같습니다. 예를 들어 "Datetime"으로 변경하면 시간 변수를 Date로 변환해야합니다 다른 해결책 : 만약 당신이 현재 시간으로 Logout_Time을 설정하고 싶다면, query를'update tbl_log set Logout_Time = NOW()로 바꿀 수있다. 여기서 Firstname =?과 \ 'Check \'=?'(Logout_Time 컬럼의 타입을 이미 "Datetime"으로 변경했다는 가정하에)이 경우 "time"변수를 전혀 생각할 필요가 없다. – Optimist

0

pst.executeUpdate();

또한

pstPreparedStatement이다를 사용해보십시오? 예약의 목록은

String sql1 = "update tbl_log set Logout_Time =? where Firstname = ? and `Check` = ?"; 

: 당신은 역 따옴표에에

변경을 넣을 필요가 있으므로 ... 그로 변경

+0

물론'pst'는'PreparedStatement'입니다; 이것은 Connection # prepareStatement()가 반환하는 것입니다. –

-1
st.executeUpdate("update reservation set busname='"   + 
        jTextField10.getText() + "',busno='"  + 
        jTextField9.getText() + "',cusname='"  + 
        jTextField8.getText() + "',noofpass='"  + 
        jTextField7.getText() + "',amount='"  + 
        jTextField6.getText() +"' where cusname='" + 
        jTextField8.getText() + "' ");