[Seasar-user:16765] Re: [S2JDBC] 日付型カラムに解析不能な文字列(0000-00-00)がある場合の対処方法について。

林 良徳 [E-MAIL ADDRESS DELETED]
2009年 1月 27日 (火) 15:23:04 JST


ひが様

林です。

> JDBCのURLに?zeroDateTimeBehavior=convertToNullを
> 加えてください。

早速のご回答ありがとうございます。
教えていただいた内容を確認してみました。

--- jdbc.diconへの追加内容ここから -------------------------------
<!-- ?zeroDateTimeBehavior=convertToNull を追加 -->
<property name="URL">"jdbc:mysql://localhost:3306/hoge?zeroDateTimeBehavior=convertToNull"</property>
------------------------------------------------------------------

--- JDBC-Genで作成されたサービスへのテストメソッドの追加 ---------
public void testZeroFillDateRecord() throws Exception {
	assertNotNull(accountService.findById("hayashi", "hogehoge"));
}
------------------------------------------------------------------

?zeroDateTimeBehavior=convertToNull
を付与削除してテスト実施確認し、設定時にはSQL例外は発生しなくなりました。

# 但し、以下のような'0000-00-00'→NULLに変換した際の
# 列名を出力しようとして置換に失敗している?と思しきログが出力されました。
# Tue Jan 27 14:46:54 JST 2009 WARN: Invalid value {1} for server 
# variable named {0}, falling back to sane default of {2}.

> 例外が発生した場合は、エラーメッセージ(この場合だと
> '0000-00-00' can not be represented as java.sql.Date)でぐぐると
> 解決することが多いですよ。

全く持ってその通りです…以後注意いたします。

また、Seasar2及びS2JDBCについては殆ど関係なかった上に
さらに環境(DBがどれかも)記載しておらず…申し訳ありません。
お詫びいたします。

なお、教えていただいた設定について念のため調べてみたところ、
以下のURLにて(「DateTimes」箇所)記述がありましたので、
参考までに貼り付けておきます。
http://dev.mysql.com/doc/refman/5.1/en/connector-j-installing-upgrading.html

以上、有難うございました。



Seasar-user メーリングリストの案内