如何使用 RowMapper 将 Timestamp 绑定到 Long?

How to bind Timestamp into Long with RowMapper?

以下 jdbc 行映射器中的代码产生异常,

Spring 启动代码:

@Override
public List<CTEvent> findAll() {

    return jdbcTemplate.query( "select * from events", (rs, rowNum) ->
        new CTEvent(
                rs.getLong("event_id"),
                rs.getLong("user_id"),
                rs.getFloat("event_lat"),
                rs.getFloat("event_lon"),
                rs.getFloat("event_alt"),
                rs.getLong("event_time")
        )
    );
}

event_time 的实际类型是 TIMESTAMP

异常:

com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from TIMESTAMP to java.lang.Long
    at com.mysql.cj.result.DefaultValueFactory.unsupported(DefaultValueFactory.java:70) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.result.DefaultValueFactory.createFromTimestamp(DefaultValueFactory.java:82) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeTimestamp(MysqlTextValueDecoder.java:81) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:87) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.protocol.a.result.ByteArrayRow.getValue(ByteArrayRow.java:91) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1290) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.jdbc.result.ResultSetImpl.getLong(ResultSetImpl.java:812) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.mysql.cj.jdbc.result.ResultSetImpl.getLong(ResultSetImpl.java:818) ~[mysql-connector-java-8.0.19.jar:8.0.19]
    at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) ~[HikariCP-3.4.2.jar:na]
    at com.ctracker.server.data.JdbcEventRepository.lambda[=11=](JdbcEventRepository.java:33) ~[main/:na]
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:94) ~[spring-jdbc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:61) ~[spring-jdbc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
    

如何摆脱这个异常?

您可以将其作为 java.sql.Timestamp 获取,然后将其转换为 long:

rs.getTimestamp("event_time").getTime()