Was wäre ein guter Kompromiss in Bezug auf das Extrahieren und Eingeben von Datumsinformationen in eine MySQL-Datenbank mit einer Mischung aus Datums- und Zeitstempeln?Umgang mit MySQL Datumsangaben und Zeitstempeln in Java
Antwort
In Java-Seite wird das Datum in der Regel durch die (schlecht entworfen, aber das beiseite) java.util.Date
dargestellt. Es ist im Grunde von der Epoch time im Geschmack eines long
, auch bekannt als ein Zeitstempel. Es enthält Informationen zu Datum und Uhrzeit. In Java ist die Genauigkeit in Millisekunden.
In SQL-Seite gibt es mehrere Standard Datums- und Uhrzeittypen, DATE
, TIME
und TIMESTAMP
(bei einigen der DB auch DATETIME
genannt), die in JDBC als java.sql.Date
, java.sql.Time
und java.sql.Timestamp
alle Subklassen von java.util.Date
vertreten sind. Die Genauigkeit ist DB-abhängig, oft in Millisekunden wie Java, aber auch in Sekunden.
Im Gegensatz zu java.util.Date
enthält die java.sql.Date
nur Informationen zum Datumsteil (Jahr, Monat, Tag). Die Time
enthält nur Informationen über den Zeitteil (Stunden, Minuten, Sekunden) und die Timestamp
enthält Informationen über beide Teile, wie zB java.util.Date
.
Die normale Praxis, einen Zeitstempel in der DB zu speichern (so java.util.Date
in Java Seite und java.sql.Timestamp
in JDBC-Seite) ist PreparedStatement#setTimestamp()
zu verwenden.
java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
Die normale Praxis einen Zeitstempel von der DB zu erhalten, ist ResultSet#getTimestamp()
zu verwenden.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.
Das MySQL documentation enthält Informationen zum Zuordnen von MySQL-Typen zu Java-Typen. Im Allgemeinen sollten Sie für Datums- und Zeitstempel von MySQL java.sql.Timestamp
verwenden. Einige Ressourcen umfassen:
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion
How to store Java Date to Mysql datetime...?
EDIT:
Wie andere schon angedeutet haben, der Vorschlag Ketten mit zu Problemen führen kann.
- 1. Umgang mit Zeitstempeln in R
- 2. Formatieren von Zeitstempeln in Java
- 3. Datumsangaben ohne Zeit- oder Zeitzonen-Komponente in Java/MySQL
- 4. Umgang mit CRF ++ und Java in Windows
- 5. Umgang mit KeyEvents in Java
- 6. MySql Unterschied zwischen zwei Zeitstempeln in Sekunden?
- 7. Umgang mit Downloads in Java
- 8. Umgang mit RuntimeExceptions in Java
- 9. Umgang mit NullPointerException in Java
- 10. MySql Unterschied zwischen zwei Zeitstempeln in Tagen?
- 11. Java-Serialisierung und Umgang mit Objekten
- 12. Umgang mit MySQL-Volltext-Sonderzeichen
- 13. Differenz in Datumsangaben in Java berechnen
- 14. mysql Vergleich von Zeitstempeln mit in Minuten voneinander
- 15. Umgang mit Rollback-MySQL-Transaktionen in Node.js
- 16. Umgang mit großen Datenmengen in PHP/MySQL
- 17. Umgang mit Warnungen mit HtmlUnitDriver in Java
- 18. Umgang mit zwei MySQL-Verbindung in PHP
- 19. Umgang mit PHP-Server und MySQL-Server in verschiedenen Zeitzonen
- 20. XML Umgang mit Android Java
- 21. Umgang mit StringIndexOutOfBoundsException in If-Anweisung Java
- 22. Array mit Zeitstempeln sortieren?
- 23. Umgang mit Karte von Karten in Java
- 24. Umgang mit Daten und Zeitzonen, mit Zend_Date
- 25. Ausnahme in Java Umgang schließlich
- 26. Umgang mit Sonderzeichen mit Java und Struts 1.1
- 27. Umgang mit Kategorien und Unterkategorien MySQL oder JSON
- 28. Erhalten Sie nur das Datum in Zeitstempeln in mysql
- 29. Java - Umgang mit Generika mit Vererbung
- 30. mysql Syntaxfehler beim Umgang mit negativen Zahlen
meinst du, dass die Verwendung von java.sql.Timestamp im Modell (Java-Ebene) schlecht ist? – cherouvim
@ cherouvim: Ja. Das Modell sollte keine JDBC-spezifischen Informationen kennen. Verwenden Sie es nur, um den Zeitstempel festzulegen. 'preparedStatement.setTimestamp (neuer Timestamp (date.getTime()));'. Es zu bekommen ist einfach, da es bereits eine Unterklasse von 'java.util.Date' ist. – BalusC
Dies funktioniert, wenn sich alle Ihre Computer und Benutzer in derselben Zeitzone befinden. Andernfalls, hüten Sie sich vor der Handhabung des MySQL JDBC-Treibers von Zeitzonen-Konvertierungen ist unglaublich komplex und fehlerhaft. Zum Beispiel siehe http: // stackoverflow.com/questions/40670532/what-are-jdbc-mysql-driver-settings-for-sane-handling-von-datumzeit-und-zeitstempel/40681941 # 40681941 –