En una aplicación Java, ¿cuál sería un buen compromiso en términos de extrapolar e ingresar información de fecha con una base de datos MySQL usando una combinación de fechas y marcas de tiempo?Manejo de fechas y marcas de tiempo de MySQL en Java
Respuesta
En el lado de Java, la fecha suele estar representada por (java.util.Date
mal diseñado, pero aparte). Básicamente está respaldado por el Epoch time en el sabor de un long
, también conocido como marca de tiempo. Contiene información sobre las partes de fecha y hora. En Java, la precisión está en milisegundos.
En el lado de SQL, hay varios tipos de fecha y hora estándar, DATE
, TIME
y TIMESTAMP
(en casa de alguna base de datos también llamado DATETIME
), que están representados en JDBC como java.sql.Date
, java.sql.Time
y java.sql.Timestamp
, todos subclases de java.util.Date
. La precisión depende de la base de datos, a menudo en milisegundos, como Java, pero también puede estar en segundos.
En contrario a java.util.Date
, el java.sql.Date
contiene solo información sobre la parte de la fecha (año, mes, día). El Time
contiene solo información sobre la parte de tiempo (horas, minutos, segundos) y el Timestamp
contiene información sobre las dos partes, como java.util.Date
.
La práctica normal para almacenar una marca de tiempo en el DB (por lo tanto, java.util.Date
en lado de Java y java.sql.Timestamp
en lado JDBC) es utilizar PreparedStatement#setTimestamp()
.
java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
La práctica normal para obtener una marca de tiempo de la DB es utilizar ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.
El MySQL documentation tiene información sobre la asignación de tipos de MySQL a los tipos de Java. En general, para datetime y timestamps de MySQL debe usar java.sql.Timestamp
. Unos recursos incluyen:
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:
Como otros han indicado, la sugerencia del uso de cadenas puede dar lugar a problemas.
- 1. MYSQL - Recuperar marcas de tiempo entre fechas
- 2. Formateo de marcas de tiempo en Java
- 3. java calcular el tiempo entre dos marcas de tiempo
- 4. Diferencia de MySql entre dos marcas de tiempo en segundos?
- 5. ¿Diferencia de MySql entre dos marcas de tiempo en días?
- 6. restar marcas de tiempo
- 7. Almacenamiento de fechas y horas en UTC y conversión de la hora local en PHP/MySQL
- 8. marcas de tiempo de SSIS
- 9. Manejo de fechas comerciales/festivas
- 10. ¿Cómo almacena MySQL las marcas de tiempo internamente?
- 11. MySQL timestamp seleccione el intervalo de fechas
- 12. comparación de fechas MySQL
- 13. ¿Cuál es la mejor forma de almacenar las fechas (marcas de tiempo) en CouchDB?
- 14. marcas de tiempo automáticas CouchDb
- 15. ¿Las marcas de tiempo de Unix son la mejor manera de almacenar marcas de tiempo?
- 16. Muestra varias marcas de tiempo en ant
- 17. Tratando con marcas de tiempo en R
- 18. Fechas sin tiempo o componente de zona horaria en Java/MySQL
- 19. ¿Contar meses entre dos marcas de tiempo en postgresql?
- 20. diferentes marcas de la cotización de MySQL
- 21. Suma y resta de fechas en Java
- 22. Controles de fechas y calendarios en Java
- 23. ¿Cómo hacer seguimiento de marcas de tiempo
- 24. Manejo de RuntimeExceptions en Java
- 25. Java: Rango de fechas mín. Y máx.
- 26. Uso de TIMESTAMP de MySQL versus almacenamiento de marcas de tiempo directamente
- 27. Selección de registros entre dos marcas de tiempo
- 28. MySQL: seleccione la fecha más reciente de un conjunto de varias marcas de tiempo posibles?
- 29. Comparar fechas en MySQL
- 30. Java BoneCP conexión MySQL tiempo de espera
¿crees que usar java.sql.Timestamp en el modelo (capa de Java) es malo? – cherouvim
@cherouvim: Sí. El modelo no debe conocer ninguna especificación de JDBC. Úselo solo para configurar la marca de tiempo. 'preparedStatement.setTimestamp (new Timestamp (date.getTime()));'. Obtenerlo es fácil ya que ya es una subclase de 'java.util.Date'. – BalusC
Esto funcionará bien si todas sus máquinas y usuarios están en la misma zona horaria. De lo contrario, tenga cuidado con el manejo del controlador JDBC de MySQL de las conversiones de zona horaria es increíblemente complejo y con errores. Por ejemplo, vea http: // stackoverflow.com/questions/40670532/what-are-jdbc-mysql-driver-settings-for-sane-handling-of-datetime-and-timestamp/40681941 # 40681941 –