【问题标题】:How to bind Timestamp into Long with RowMapper?如何使用 RowMapper 将时间戳绑定到 Long?
【发布时间】:2020-07-03 09:19:45
【问题描述】:

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$0(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]
    

我怎样才能摆脱这个异常?

【问题讨论】:

    标签: mysql spring-boot jdbc timestamp jdbctemplate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2012-04-30
      • 1970-01-01
      相关资源
      最近更新 更多