2016-12-13 1 views
0

Ich bin mit Spring JDBC ein classifiedAd Objekt zu meiner MariaDB Datenbank zu speichern, wie folgt:Frühling JDBC MySQL/MariaDB Daten abgeschnitten für Spalte 'start_date' in Zeile 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); 

Das classifiedAd Objekt ein Feld hat private Calendar startDate dass ich in java.sql.Timestamp umwandle, bevor ich es auf die entsprechende Spalte start_date datetime null, in der Datenbank abbilde.

Aber beim Einfügen erhalte ich die folgende Warnung:

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) 

Ich verstehe wirklich nicht, warum der Zeitstempel abgeschnitten wird, da es here angegeben ist, dass es die richtige Art zu bedienen ist. Irgendwelche Hilfe bitte?

EDIT

Dies sind die Werte, die ich vorher bekommen und nach dem Einfügen:

Anfangswert:

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 

Nach dem Einfügen und Abrufen des Objekts:

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

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

Irgendwelche Hilfe bitte?

+0

Das einzige, was ich von ihm ist das Datumsformat Ausgabe denken kann ... wie werden Ihre Daten gespeichert Auf Ihren mariabb-Tabellen ... können Sie das Ergebnis einer Select-Anweisung für dieses Feld posten? – Hackerman

+0

Aktivieren Sie die allgemeine Anmeldung am MariaDB-Server, führen Sie Ihren Code aus, Sie werden sofort sehen, was gesendet wird und warum die Warnung ausgegeben wird. – elenst

Antwort

0

DATEs sollte 2016-12-31 formatiert werden.
und TIMESTAMP Werte sollten 2016-12-31 23:59:59 formatiert werden.

Andere Formate Mai verursachen die Fehlermeldung, die Sie erhalten haben.

+0

Wie kann ich das tun? – karim

+0

Woher kommen die Datumszeichenfolgen? Wie sehen Sie aus? –

0

Leider lese ich meine Datenbank Base wurde mit date Spalten statt datetime erzeugt ich, dass jetzt korrigiert, es funktioniert gut ...

Verwandte Themen