Trong một ứng dụng java, điều gì sẽ thỏa hiệp tốt về mặt extracing và nhập thông tin ngày tháng với một cơ sở dữ liệu MySQL bằng cách sử dụng kết hợp các datetimes và timestamps?Xử lý các thời gian và thời gian biểu của MySQL trong Java
Trả lời
Ở phía Java, ngày thường được đại diện bởi (thiết kế kém, nhưng sang một bên) java.util.Date
. Về cơ bản nó được hỗ trợ bởi Epoch time trong hương vị của một long
, còn được gọi là dấu thời gian. Nó chứa thông tin về cả ngày và phần thời gian. Trong Java, độ chính xác bằng mili giây.
Trong bên SQL, có một số ngày và thời gian loại tiêu chuẩn, DATE
, TIME
và TIMESTAMP
(tại một số của DB hay còn gọi là DATETIME
), được trình bày trong JDBC như java.sql.Date
, java.sql.Time
và java.sql.Timestamp
, tất cả lớp con của java.util.Date
. Độ chính xác phụ thuộc vào DB, thường bằng mili giây như Java, nhưng nó cũng có thể bằng giây.
Ngược lại với java.util.Date
, java.sql.Date
chỉ chứa thông tin về phần ngày (năm, tháng, ngày). Time
chỉ chứa thông tin về phần thời gian (giờ, phút, giây) và Timestamp
chứa thông tin về cả hai phần, như là java.util.Date
.
Thực hành thông thường để lưu dấu thời gian trong DB (do đó, java.util.Date
ở phía Java và java.sql.Timestamp
ở phía JDBC) là sử dụng 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);
Thực hành thông thường để lấy dấu thời gian từ DB là sử dụng ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.
MySQL documentation có thông tin về ánh xạ các loại MySQL với các loại Java. Nói chung, đối với thời gian và giờ của MySQL, bạn nên sử dụng java.sql.Timestamp
. Một vài nguồn lực bao gồm:
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:
Như những người khác đã chỉ ra, những gợi ý của việc sử dụng các chuỗi có thể dẫn đến vấn đề này.
- 1. Thời gian Android và Java Thời gian
- 2. Xử lý dấu thời gian trong R
- 3. Thời gian trong java
- 4. thời gian mysql và thời gian tìm nạp
- 5. thời gian mysql và thời gian php không giống nhau
- 6. Xử lý thời gian chờ của xà phòng trong PHP
- 7. xử lý thời gian chờ kỳ lân
- 8. xử lý hết thời gian chờ lwp
- 9. MySQL tạo thời gian và thời gian cập nhật dấu thời gian
- 10. Tính tổng thời gian thời gian trong MySQL
- 11. Cột Ngày/Thời gian Mysql và kiên trì Java
- 12. ngày và thời gian của datetime Bắt (? Lỗi trong MySQL)
- 13. Xử lý chuỗi thời gian chờ và tương lai Scala
- 14. Xử lý thời gian chờ của urllib2? - Python
- 15. Hết thời gian xử lý con của Python?
- 16. Thời gian tồn tại của thời gian
- 17. Cách xử lý thời gian lưu trữ trong SQL
- 18. Xử lý thời gian chờ của phiên trong trình xử lý http chung
- 19. cột dấu thời gian mysql
- 20. Xử lý khoảng trống khoảng thời gian trong Chaco
- 21. Dấu thời gian Mysql và ngày php()
- 22. Đặt lại phần thời gian của dấu thời gian trong Java
- 23. Xử lý âm thanh theo thời gian thực trong Android
- 24. thời gian thực hiện mysql
- 25. Phương pháp hết thời gian trong java
- 26. Làm thế nào để bạn đặt thời gian và chỉ thời gian trong lịch trong Java?
- 27. Xử lý các tập dữ liệu rất lớn và chỉ trong thời gian tải
- 28. Android: Xử lý ảnh theo thời gian thực
- 29. Thời gian biểu đồ thị của biểu đồ trong Python
- 30. Cách xử lý sự kiện thời gian trên iOS?
Bạn có nghĩ rằng việc sử dụng java.sql.Timestamp trong mô hình (lớp Java) không tốt? – cherouvim
@cherouvim: Có. Mô hình không nên biết về bất kỳ chi tiết cụ thể nào của JDBC. Chỉ sử dụng nó để đặt dấu thời gian. 'preparStatement.setTimestamp (Dấu thời gian mới (date.getTime()));'. Làm cho nó dễ dàng vì nó đã là một lớp con của 'java.util.Date'. – BalusC
Điều này sẽ hoạt động tốt nếu tất cả máy và người dùng của bạn ở cùng múi giờ. Nếu không, hãy cẩn thận việc xử lý các chuyển đổi múi giờ của trình điều khiển JDBC của MySQL là vô cùng phức tạp và lỗi. Ví dụ, xem http: // stackoverflow.com/questions/40670532/what-are-jdbc-mysql-driver-settings-for-sane-handling-of-datetime-và-timestamp/40681941 # 40681941 –