2016-12-13 45 views
0

我使用Spring JDBC的classifiedAd對象存儲到我的MariaDB的數據庫,如下所示:春JDBC的MySQL/MariaDB的數據被截斷爲列「日期」第1行

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,它是正確的類型使用不明白爲什麼時間戳被截斷。請幫忙嗎?

編輯

這些是我得到的前值和插入後:

初始值:

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

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

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 

插入和檢索對象後

請幫忙嗎?

+0

,我能想到的它的唯一的事情就是日期格式問題...生成存儲在您的日期如何在你的mariadb表上......你可以發佈該字段的select語句的結果嗎? – Hackerman

+0

在MariaDB服務器上啓用常規日誌,運行您的代碼,您將馬上看到它發送的內容以及爲什麼會生成警告。 – elenst

回答

0

DATEs應該形成2016-12-31
DATETIMETIMESTAMP值應該形成2016-12-31 23:59:59

其他格式可能會導致您收到的錯誤消息。

+0

我該怎麼做? – karim

+0

日期字符串從哪裏來?他們看起來怎麼樣? –

0

對不起,我我的數據庫基礎與date列,而不是datetime我糾正,現在它的正常工作......

相關問題