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?
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
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