"Date and Time API をJDBCで扱ってみる"を読んでDB2を確認した
昨日の発表資料です。
— ひじり🐸 (@hijiri408) 2017年4月27日
Date and Time API をJDBCで扱ってみる https://t.co/7NUUDCOBhS #kanjava
を読んで、昔DB2で仕事していた身として、DB2の状況が気になったので検証してみた。
環境など
- Windows10
- jdk 1.8
- DB2 Express-C 11.1 + JDBCドライバ 4.22.29(http://www-01.ibm.com/support/docview.wss?uid=swg21363866)
ソース
package example; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.time.LocalDate; public class localDate { public static void main(String[] args) { String url = "jdbc:db2://localhost:50000/SAMPLE"; String user = "xxxx"; String pass = "xxxx"; try { Class.forName("com.ibm.db2.jcc.DB2Driver"); Connection con = DriverManager.getConnection(url, user, pass); PreparedStatement ps = null; ps = con.prepareStatement("update sample set ts = ? where id = 'hoge'"); ps.setObject(1, LocalDate.of(2016, 4, 29)); ps.executeUpdate(); con.close(); System.out.println("接続成功"); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } } }
結果
LocalDateの時点で未対応…?
com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][1091][10824][4.22.29] データ変換が無効です: 要求された変換のパラメーター・インスタンス 2016-04-29 が無効です。 ERRORCODE=-4461, SQLSTATE=42815 at com.ibm.db2.jcc.am.ld.a(ld.java:810) at com.ibm.db2.jcc.am.ld.a(ld.java:66) at com.ibm.db2.jcc.am.ld.a(ld.java:116) at com.ibm.db2.jcc.am.vp.c(vp.java:2677) at com.ibm.db2.jcc.am.vp.setObject(vp.java:2456) at example.localDate.main(localDate.java:26)
まとめ
悲しい結論になってしまったのでIBMさんにはぜひとも早めに対応していただきたい。