JDBCとMySQLのtimstamp型 [Java]
前回に引き続き、JavaアプリケーションからMySQLのtimestampへのアクセス実行で嵌った。
hibernateを利用してのDBアクセス実装なのだが、以下のようなカラムが存在すると、Java実行時に例外が発生する。
create_date timestamp default '0000-00-00 00:00:00' not null ,
例外内容
情報: could not read column value from result set: create20_0_0_; Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
2013/05/22 14:15:51 org.hibernate.util.JDBCExceptionReporter logExceptions
警告: SQL Error: 0, SQLState: S1009
2013/05/22 14:15:51 org.hibernate.util.JDBCExceptionReporter logExceptions
致命的: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
org.hibernate.exception.GenericJDBCException: could not execute query
調べたところ、 JDBCのバージョンによっては、timestampにnullや'0000-00-00 00:00:00'が設定されていると、例外となるらしい。
実運用上は必ずシステム日時が設定されるので問題ないが、なんにせよ例外は許したくない。
例外キャッチして作り込みをする手もなくはないがあまり生産的とは言えない。まっとうな回避策はなさそうなのでカラムの型をdatetimeにし、not nullの制限もはずした。
すっきりしない…
Javaデータアクセス実践講座 (DB Magazine SELECTION)
- 作者: 松信 嘉範
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/28
- メディア: 単行本(ソフトカバー)
コメント 0