読者です 読者をやめる 読者になる 読者になる

"Date and Time API をJDBCで扱ってみる"を読んでDB2を確認した

を読んで、昔DB2で仕事していた身として、DB2の状況が気になったので検証してみた。

環境など

ソース

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さんにはぜひとも早めに対応していただきたい。