2012-03-08 3 views
0

코드를 작성했습니다. 버튼을 누르면 텍스트 필드의 값을 사용하여 데이터베이스에 레코드를 만듭니다. 코드를 컴파일하지만 실행하면 다음 오류 메시지가 표시됩니다.PreparedStatement Java에 삽입

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'From, To, TotalDays, VacationType, Notes, Signature, Date) VALUES('','','','',''' at line 1 

제안 사항? (당신이 ANSI 모드가 활성화되어있는 경우 또는 따옴표)

final JButton btnSubmit = new JButton("Submit"); 
    btnSubmit.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) {     
     try { 

      String vacationid = text_vacationID.getText(); 
      String staffid = text_staffID.getText(); 
      String from = text_from.getText(); 
      String to = text_to.getText(); 
      String totaldays = text_totalDays.getText(); 
      String vacationtype = text_vacationType.getText(); 
      String notes = textArea.getText(); 
      String signature = text_signature.getText(); 
      String date = text_date.getText(); 


      String sql = "INSERT into vacation (VacationID, StaffID, From, To, TotalDays, VacationType, Notes, Signature, Date) VALUES" + "(?,?,?,?,?,?,?,?,?)";  

      PreparedStatement prest = con.prepareStatement(sql); 
      prest.setString(1, vacationid); 
      prest.setString(2, staffid); 
      prest.setString(3, from); 
      prest.setString(4, to); 
      prest.setString(5, totaldays); 
      prest.setString(6, vacationtype); 
      prest.setString(7, notes); 
      prest.setString(8, signature); 
      prest.setString(9, date); 

      prest.executeUpdate(); 
      JOptionPane.showMessageDialog(frmBookVacation, "Vacation has been booked for Employee with ID: " + vacationid); 


     } 

     catch (SQLException e) { 
     //System.out.println("Record couldn't be added!"); 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(frmBookVacation, "Vacation couldn't be booked. Please try again."); 
     } 
     } 

     }); 
    btnSubmit.setBounds(201, 350, 89, 23); 
    panel_1.add(btnSubmit); 
+1

보낸 사람은 To와 Date라는 예약어로되어 있습니다 (매뉴얼을 확인하십시오). – Eduardo

답변

0

From는 MySQL은 예약 된 단어입니다

`From` 
+0

그것은 작동합니다 :) 좋아요, 고마워요. – Pita

+7

* "또한 다음과 같이 코드의 모든 필드를 제거 할 수 있습니다."* 모든 필드를 지정하는 경우에만 테이블이 정의 된 순서대로 수정 한 사람이 없습니다 테이블 정의. 매우 의존적 인 생각입니다. 명시적인 열 이름은 이유 때문에 사용됩니다. –

5

from는 SQL 예약어, 당신은 escape it with backticks해야합니다.

String sql = "INSERT into vacation (`VacationID`, `StaffID`, `From`, `To`, `TotalDays`, `VacationType`, `Notes`, `Signature`, `Date`) VALUES" + "(?,?,?,?,?,?,?,?,?)"; 

나는 모든 컬럼 이름을 일관성을 위해 그리고 몇몇 다른 엔진에 의해 예약 될 수 있기 때문에 수행했다.

+0

'DATE '는 예약 키워드가 아닙니다 (적어도 더 이상은 아닙니다). –

+0

@AmalMurali : 고마워, 나는 그 문장을 지금 waffled. :-) –

1

일부 열 이름은 SQL 키워드와 일치하는 백 따옴표로 둘러싸고 있습니다. 또한 다음과 같이 테이블의 모든 필드를 코드에서 제거 할 수 있습니다.

String sql = "INSERT into vacation VALUES" + "(?,?,?,?,?,?,?,?,?)";  

그래야합니다.