- PR -

PreparedStatementオブジェクトのパラメータセットとSQLの実行

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 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)
------------------------------------------------------------

何かお気づきの点などございましたら
宜しくお願いいたします。
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2005-07-13 00:18
書いてあることが読めれば答えは自明でしょう。

引用:

未記入さんの書き込み (2005-07-12 22:44) より:
java.sql.SQLException: ERROR: column "update_date" is of type date but expression is of type character varying


"update_date"という名前のカラムはDATE型ですが、式がCHAR型なのでエラーになってます。
そういうときはsetDate()かsetTimestamp()使いましょう。

Windowsでうまく動いた、とのことですが、それはたまたま動いただけで
もともと無作法なコードを書いていたのではないですか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-13 00:26
PreparedStatementでSQLの表示って、
DBに直接送信されるSQLとは関係ないですよね。
ドライバの実装によると思いますが。
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 2005-07-13 08:57
ご教授いただきまして誠にありがとうございました。
解決しました。

Windows上でsetStringを使って上手くいっていたために
それでも通ると思い込み、
またPreparedStatementオブジェクトの
標準出力結果が実際に送信されているSQLと思い込んでいたため
最初の質問に至っていました。

DATE型カラム、TIME型カラムは正しく
setDate, setTimeを利用しましたところ
PGMは正常終了しました。(本来当たり前のことだったのですが。)

またこのとき、PreparedStatementの標準出力は
Mac上(Eclipseコンソール上)では
INSERT INTO Public.TEST VALUES ( ?, ?, ?, ?, ・・・)
のように各パラメータ部分が「?」表記になっていました。
お教えいただきましたとおり
これこそがドライバの実装によるものなのですね。

お教えくださった皆様、誠にありがとうございました。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-07-13 11:01
あちゃー、私も誤解があったようです

やはりエラーメッセージの詳細は必要ですね。
原因は koe さんが解説された通りです。

# ここまで書いていて一つ思い出しました。←遅い
# Windows で同じようにたまたま動いていたケースで、Linux に持っていった時に同じように
# 仕様に正確な実装が要求され、それを満たしていなかったため例外が発生するというものでした。
## そう言えば IE では、終了タグがない、HTML として正しくない内容でも何とか
## 表示できてしまう(結果、他のブラウザでは表示できない)という問題もありますね。

Windows 上で動いていると書かれていたため、「setString() を使っているが、テーブル構造(各カラムの型)はすべて文字列型(CHAR, VARCHAR)か」ということを確認しなかったのも私の非でございます(_ _;)
(不足している情報としてテーブル構造を書いてもらえば、プログラムの誤りが直ちにわかった問題でした。)

私も自戒いたしたいと思います。

スキルアップ/キャリアアップ(JOB@IT)