2012-02-12 4 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); 

最初の文が実行され、データベースを更新しますが、2番目のdoesntの、私のコードです。私はステートメントを印刷して、これをpsqlで直接実行し、SQLコードは有効ですが、なぜうまくいかないのですか?

+2

「2番目のコードでは実際に何が起こるのかわかりません。結果は何ですか?例外?例外はありませんが、価値はありませんか?何? –

+0

例外はスローされていないようですが、execute()メソッドの後のコードは実行されません – user195257

+0

問題が見つかりました。日付はSQLの日付型ですが、javaの文字列です。 – user195257

答えて

1

エラーメッセージまたはログメッセージがあなたと私たちの両方に役立つでしょう。

予約記録がない以外に何が間違っているかの兆候はありませんか?

スキーマの詳細が役立ちます。おそらく、主キー制約または外部キー制約に違反している可能性があります。

私はそれらを2つの別々の方法にリファクタリングして個別にテストします。

これらの2つのINSERTは、1つのトランザクションの一部ですか?彼らはする必要があります。予約INSERTが失敗した場合、あなたは何をしたいですか?ユーザーはロールバックする必要がありますか?

あなたのスニペットにはリソースのクリーンアップ方法が示されていません。あまりにもそれらについて考えるか、または後で悲しみに来るでしょう。

0

問題はJDBCの日付の変換に関連していることが分かりました。あなたが解決してうれしく思います。この種の問題はかなり発生し、JDBC型変換に精通する価値があります。長年にわたり

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

、私は繰り返し、ページの最後にある表を参照している、とそう、あなたは以下となります。次のリンクは良い説明と参照があります。 (これはJava 1.7バージョンのドキュメントでは見つかりませんが、同じである必要があります)