聞こえないJavaエンジニアが適当に書き連ねていく

つらつらとメモしたり日頃の溜まっている想いを吐き出す場所です。

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