2012-02-12 3 views
0

된 PreparedStatement가 제대로

String insertSQL = "INSERT INTO customer (c_id, f_name, l_name, address, email, phone)" 
        + " VALUES (?,?,?,?,?,?)"; 
      PreparedStatement prepStmt = connection.prepareStatement(insertSQL); 
      prepStmt.setString(1, c_id); 
      prepStmt.setString(2, f_name); 
      prepStmt.setString(3, l_name); 
      prepStmt.setString(4, address); 
      prepStmt.setString(5, email); 
      prepStmt.setString(6, telephone); 
      runUpdateQuery(prepStmt); 

      insertSQL = "INSERT INTO reservation (c_id, book_date, s_time, e_time, amount) " 
        + "VALUES (?,?,?,?,?)"; 
      prepStmt = connection.prepareStatement(insertSQL); 
      prepStmt.setString(1, c_id); 
      prepStmt.setString(2, date); 
      prepStmt.setDouble(3, startTime); 
      prepStmt.setDouble(4, endTime); 
      prepStmt.setString(5, amount); 
      out.println(prepStmt); 
      runUpdateQuery(prepStmt); 

첫 번째 문을 실행하고 데이터베이스를 업데이트하지만 두 번째 나던, 내 코드입니다. 내가 진술서를 인쇄하고 psql에서 직접 실행하고 SQL 코드가 유효하다. 왜 작동하지 않을까?

+2

"두 번째 것은 아닙니다."실제로 어떤 일이 발생하는지 설명하지 않습니다. 결과는 무엇입니까? 예외? 예외는 없지만 가치는 없습니까? 뭐? –

+0

아무런 예외도 발생하지 않았지만 execute() 메서드 다음의 코드는 실행되지 않습니다 – user195257

+0

문제가 발견되었습니다. 날짜는 SQL의 날짜 유형이지만 java의 문자열은 현재까지 문자열을 캐스팅해야합니다! – user195257

답변

1

오류 또는 로그 메시지는 사용자와 우리 모두에게 도움이됩니다.

예약 기록이 없으면 무엇이 잘못되었는지 알 수 있습니까?

스키마 세부 정보가 도움이 될 수 있습니다. 아마도 기본 키 또는 외래 키 제약 조건을 위반하는 것일 수 있습니다.

두 개의 개별 메소드로 리팩토링하고 개별적으로 테스트했습니다.

이 두 INSERT는 단일 트랜잭션의 일부입니까? 그들은 있어야합니다. 예약 INSERT가 실패하면 어떻게 될까요? 사용자가 롤백해야합니까?

스 니펫에는 리소스 정리 방법이 표시되어 있지 않습니다. 그것들에 대해서 더 생각해보십시오. 그렇지 않으면 나중에 슬픔에 빠지게 될 것입니다.

0

문제는 JDBC 형식의 날짜 변환과 관련되어 있다는 것을 알았습니다. 기꺼이 해결했습니다. 이러한 종류의 문제는 꽤 많이 발생하며 JDBC 유형 변환에 익숙해 질 필요가 있습니다. 수년에 걸쳐

http://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/mapping.html

, 나는 반복 페이지의 끝에서 표를 언급했다, 그래서 당신은 다음 링크는 좋은 설명 및 참조입니다. (자바 1.7 버전의 문서에서는 찾을 수 없지만 동일해야합니다.)

관련 문제