java - Spring JDBC MySQL/MariaDB 数据在第 1 行的 'start_date' 列被截断

标签 java mysql database mariadb jdbctemplate

我使用 Spring JDBC 将分类广告对象存储到我的 MariaDB 数据库,如下所示:

public void insert(ClassifiedAd classifiedAd){

   this.jdbcTemplate.update(new PreparedStatementCreator(){

      @Override
      public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {

          PreparedStatement ps = connection.prepareStatement(INSERT_SQL, Statement.RETURN_GENERATED_KEYS);
          ...
          ps.setTimestamp(6, new Timestamp(classifiedAd.getStartDate().getTimeInMillis()));
          ...
          return ps;
        }
   }, keyHolder);

classifiedAd 对象有一个字段 private Calendar startDate,我将其转换为 java.sql.Timestamp,然后将其映射到相应的列 start_date datetime null, 在数据库中。

但是插入时我收到以下警告:

Dec 13, 2016 10:59:10 AM com.mchange.v2.c3p0.SQLWarnings logAndClearWarnings
INFO: Data truncated for column 'start_date' at row 1
java.sql.SQLWarning: Data truncated for column 'start_date' at row 1
    at org.mariadb.jdbc.MariaDbConnection.getWarnings(MariaDbConnection.java:833)
    at com.mchange.v2.c3p0.impl.NewProxyConnection.getWarnings(NewProxyConnection.java:907)
    at com.mchange.v2.c3p0.SQLWarnings.logAndClearWarnings(SQLWarnings.java:42)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.refurbishResourceOnCheckin(C3P0PooledConnectionPool.java:285)
    at com.mchange.v2.resourcepool.BasicResourcePool.attemptRefurbishResourceOnCheckin(BasicResourcePool.java:1606)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$200(BasicResourcePool.java:32)
    at com.mchange.v2.resourcepool.BasicResourcePool$1RefurbishCheckinResourceTask.run(BasicResourcePool.java:1228)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

我真的不明白为什么时间戳被截断,因为它被指定为 here这是正确使用的类型。请问有什么帮助吗?

编辑

这些是我在插入之前和之后获得的值:

初始值:

System.out.println(BankCardDAOTest.expiration_date.get(Calendar.DAY_OF_MONTH) + "/"
    + (classifiedAd.getStartDate.get(Calendar.MONTH) + 1) + "/"
    + classifiedAd.getStartDate.get(Calendar.YEAR) + " "
    + classifiedAd.getStartDate.get(Calendar.HOUR) + ":"
    + classifiedAd.getStartDate.get(Calendar.MINUTE) + ":"
    + classifiedAd.getStartDate.get(Calendar.SECOND));

====> 27/7/2016 4:3:54

插入和检索对象后:

dao.insert(classifiedAd);
classifiedAd = dao.select(classifiedAd.getId());

====> 27/7/2016 0:0:0

请问有什么帮助吗?

最佳答案

DATE 的格式应为 2016-12-31
DATETIMETIMESTAMP 值的格式应为 2016-12-31 23:59:59

其他格式可能会导致您收到错误消息。

关于java - Spring JDBC MySQL/MariaDB 数据在第 1 行的 'start_date' 列被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41120005/

相关文章:

mysql - 数据导入时数据库断开

java - Storm Spout 没有得到 Ack

java - 将 jar 文件下载到 R 包的 inst/java 目录中

java - 不能用 UTF-8 表示的字符串

MySQL - 从每个月中选择前 100 条记录

PHP PDO 包装器更新 +1

java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.studentcornerapp.studentcorner.Posts.Posts

java - 更改表结构但 hibernate 不更新它

mysql LEFT JOIN 与来自其他表的条件

php - 使用两个单独的查询插入两个表