2012-02-12 79 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

「第二個不」實際上沒有描述會發生什麼。結果是什麼?例外?沒有例外,但沒有價值?什麼? – 2012-02-12 15:51:02

+0

似乎沒有異常拋出,但執行()方法後的任何代碼不會運行 – user195257 2012-02-12 15:54:25

+0

發現問題,日期是sql中的日期類型,但在java中的字符串,需要將字符串轉換爲日期! – user195257 2012-02-12 15:58:01

回答

1

錯誤或日誌消息將幫助你和我們。

除了沒有保留記錄之外,是否沒有跡象表明存在什麼問題?

架構細節可能會有所幫助。也許你違反了主鍵或外鍵約束。

我把這些重構成兩個獨立的方法,並單獨測試它們。

這兩個INSERT是單個事務的一部分嗎?他們應該是。如果預訂INSERT失敗,你希望發生什麼?用戶是否應該回滾?

您的代碼段不顯示如何清理資源。你最好也考慮一下,否則你會在後來感到悲傷。

0

我從您自己的意見中發現,您發現問題與JDBC日期類型轉換有關 - 很高興您解決了這個問題。這種問題出現很多,值得深入瞭解JDBC類型轉換。下面的鏈接是一個很好的解釋和參考:

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

多年來,我已經在頁面的結尾反覆提到的表,你也一樣。 (我不能在Java 1.7版本的文檔中找到它,但它應該是相同的。)