2012-05-25 39 views
8

Tôi có một ngày JDBC hiện tại chèn vào Cơ sở dữ liệu Mysql.Thời gian trong java

Nó gửi ngày hiện tại và thời gian cố định vào trường loại ngày tháng Mysql là 2012/05/25 00:00:00. Phần ngày hoạt động rất tốt nhưng thời gian không hiển thị bất kỳ giá trị nào.

Tôi đang chèn giá trị với đoạn mã sau:

java.util.Date myDate = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime()); 
PreparedStatement PStmt = con.prepareStatement(Sql query); 
PStmt.setDate(1,sqlDate); 
+0

Bạn có thể dán mã chèn ngày không? Bạn đã sử dụng loại cột nào trong cơ sở dữ liệu? – pablochan

+0

java.util.Date myDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date (myDate.getTime());
PreparedStatement PStmt = con.prepareStatement (truy vấn Sql);
PStmt.setDate (1, sqlDate); – Narayan

+0

Loại cột trong MySQL là gì? – dbf

Trả lời

1

1) Sử dụng java.util.Date trong lớp java của bạn.

2) Đặt datatye TIMESTAMP trong mysql.

Date CreatedDate= new Date(System.currentTimeMillis()); 

Đối PreparedStatement: Nó có thể là như thế này:

PreparedStatement PStmt = con.prepareStatement(Sql query); 
PStmt.setDate(1,CreatedDate); 
+0

Điều gì sẽ là tuyên bố chuẩn bị cho điều này được tạo raDate – Narayan

+3

Nó không làm việc cho tôi bởi vì nó mất thời gian. Sử dụng java.sql.Timestamp thay vì setTimestamp (...) –

2

Tôi nghĩ rằng bạn cần phải có timestamp as type cột trong mysql.

+0

DATETIME cũng có thể là tốt – bpgergo

16

Sử dụng java.sql.Timestamp thay vì java.util.Date

Ví dụ, nếu bạn đang sử dụng PreparedStatement để xử lý chèn, bạn có thể vượt qua ngày của bạn như ;

java.util.Date date = new Date(); 
pst.setTimestamp(columIndex, new java.sql.Timestamp(date.getTime())); 
+0

+1: Vấn đề là 'java.sql.Date' là * cụ thể * chỉ có một ngày, và do đó loại bỏ thành phần thời gian. –

+0

Nó hiển thị lỗi khi tôi cố gắng thực hiện lệnh chèn, tức là nó hiển thị lỗi khi tôi sử dụng pstmt.executeupdate(); – Narayan

+0

Bạn đã không chỉ định lỗi bạn đang nhận được, tôi giả sử nó đang yêu cầu miễn là tham số - xem câu trả lời đã chỉnh sửa. – Bitmap

1

Mặc dù một bài cũ, câu trả lời rất đơn giản và phụ thuộc vào yêu cầu của bạn - theo yêu cầu của bạn sử dụng kiểu dữ liệu DATETIME và sử dụng như sau

java.util.Date date = new Date(); 
pst.setTimestamp(columIndex, new java.sql.Timestamp(date.getTime()).getTime()); 

Hãy xem lý do từ cả hai cơ sở dữ liệu và bên jdbc.

Bắt đầu từ loại dữ liệu trong cơ sở dữ liệu và chọn loại phù hợp. Một trong đó chính xác phù hợp với trường hợp của bạn là DATETIME như bạn muốn ngày và giờ/phút/giây. Loại DATETIME được sử dụng để lưu trữ thời gian đồng hồ treo tường trong khi TIMESTAMP là cho một điểm cố định trong thời gian (một vài mili giây sau thời đại). Ngoài ra còn có sự khác biệt trong cách cả hai được lưu trữ nội bộ trong MySQL.

Bây giờ Khi bạn đến bên JDBC, bạn có các phương thức API cho Ngày (chỉ phần ngày), Dấu thời gian (ngày và giờ) và Giờ (chỉ có thời gian). Đó là tất cả những gì JDBC cung cấp. Vì vậy, bây giờ, API phù hợp với nhu cầu của bạn là setTimestamp

Các vấn đề liên quan