H2数据库-Java的OffsetDateTime和h2类型之间的映射

路加病毒

我正在使用H2数据库进行单元测试。

根据官方的H2文档,JavaOffsetDateTime和h2数据类型之间没有映射TIMESTAMP WITH TIME ZONE映射到Java的H2TimestampWithTimezone类型,这不是我所需要的)。

有什么办法可以做到这一点?

戈德·汤普森

虽然这是事实,一个普通的getObject(int columnIndex)会返回一个org.h2.api.TimestampWithTimeZone对象,使用getObject(int columnIndex, Class<T> type)返回一个java.time.OffsetDateTime似乎好工作我把H2版本1.4.196为:

package h2test;

import java.sql.*;
import java.time.OffsetDateTime;

public class H2testMain {

    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:test")) {
            Statement st = conn.createStatement();
            st.execute("CREATE TABLE TEST (ID INT PRIMARY KEY, TWTZ TIMESTAMP WITH TIME ZONE)");
            st.execute("INSERT INTO TEST (ID, TWTZ) VALUES (1, '1981-02-03 19:20:21-02:00')");
            ResultSet rs = st.executeQuery("SELECT TWTZ FROM TEST WHERE ID=1");
            rs.next();
            OffsetDateTime odt = rs.getObject(1, OffsetDateTime.class);
            System.out.println(odt.getClass().getName());  // java.time.OffsetDateTime
            System.out.println(odt.toString());  // 1981-02-03T19:20:21-02:00
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章