- - PR -
PreparedStatementオブジェクトのパラメータセットとSQLの実行
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-12 22:44
Gio様、ありがとうございます。
念のためエラー内容をここに添付させていただきます。 ------------------------------------------------------------ java.sql.SQLException: ERROR: column "update_date" is of type date but expression is of type character varying at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1471) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1256) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:175) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:389) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:330) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:282) ------------------------------------------------------------ 何かお気づきの点などございましたら 宜しくお願いいたします。 | ||||
|
投稿日時: 2005-07-13 00:18
書いてあることが読めれば答えは自明でしょう。
"update_date"という名前のカラムはDATE型ですが、式がCHAR型なのでエラーになってます。 そういうときはsetDate()かsetTimestamp()使いましょう。 Windowsでうまく動いた、とのことですが、それはたまたま動いただけで もともと無作法なコードを書いていたのではないですか? | ||||
|
投稿日時: 2005-07-13 00:26
PreparedStatementでSQLの表示って、
DBに直接送信されるSQLとは関係ないですよね。 ドライバの実装によると思いますが。 | ||||
|
投稿日時: 2005-07-13 08:57
ご教授いただきまして誠にありがとうございました。
解決しました。 Windows上でsetStringを使って上手くいっていたために それでも通ると思い込み、 またPreparedStatementオブジェクトの 標準出力結果が実際に送信されているSQLと思い込んでいたため 最初の質問に至っていました。 DATE型カラム、TIME型カラムは正しく setDate, setTimeを利用しましたところ PGMは正常終了しました。(本来当たり前のことだったのですが。) またこのとき、PreparedStatementの標準出力は Mac上(Eclipseコンソール上)では INSERT INTO Public.TEST VALUES ( ?, ?, ?, ?, ・・・) のように各パラメータ部分が「?」表記になっていました。 お教えいただきましたとおり これこそがドライバの実装によるものなのですね。 お教えくださった皆様、誠にありがとうございました。 | ||||
|
投稿日時: 2005-07-13 11:01
あちゃー、私も誤解があったようです
やはりエラーメッセージの詳細は必要ですね。 原因は koe さんが解説された通りです。 # ここまで書いていて一つ思い出しました。←遅い # Windows で同じようにたまたま動いていたケースで、Linux に持っていった時に同じように # 仕様に正確な実装が要求され、それを満たしていなかったため例外が発生するというものでした。 ## そう言えば IE では、終了タグがない、HTML として正しくない内容でも何とか ## 表示できてしまう(結果、他のブラウザでは表示できない)という問題もありますね。 Windows 上で動いていると書かれていたため、「setString() を使っているが、テーブル構造(各カラムの型)はすべて文字列型(CHAR, VARCHAR)か」ということを確認しなかったのも私の非でございます(_ _;) (不足している情報としてテーブル構造を書いてもらえば、プログラムの誤りが直ちにわかった問題でした。) 私も自戒いたしたいと思います。 |