MySQL で Date 型や Timestamp 型の列を定義している場合、この列の値が null の時に jdbc でアクセスすると SQLException が飛んできます。
java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 11 to TIMESTAMP. com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:1336) com.mysql.jdbc.ByteArrayRow.getTimestampFast(ByteArrayRow.java:126) com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:6687) com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:6006)
MySQL 用の jdbc ドライバ Connector/J 3.1 以降の仕様だそうで、これを回避するには url の末尾に zeroDateTimeBehavior=convertToNull を付けてやれば良いそうです。
<component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "com.mysql.jdbc.Driver" </property> <property name="URL"> "jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull" </property> <property name="user">"test"</property> <property name="password">"test"</property> </component>
100% 忘れる自信があるので自分用にメモっておきます。よう俺、役に立ったか?