2010-03-08 47 views
83

Bất kỳ cơ thể nào có thể cho tôi biết làm thế nào tôi có thể lưu trữ Java Date to Mysql datetime ...?Làm thế nào để lưu trữ Java Date to Mysql datetime ...?

Khi tôi đang cố gắng để làm như vậy ... chỉ ngày được lưu trữ và thời gian duy trì 00:00:00 trong các cửa hàng ngày Mysql như thế này ...

2009-09-22 00:00:00 

Tôi muốn không chỉ ngày mà còn thời gian ... như

2009-09-22 08:08:11 

tôi đang sử dụng JPA (Hibernate) với các lớp mydomain mùa xuân sử dụng java.util.Date nhưng tôi có bảng được tạo ra sử dụng các truy vấn viết tay ...

này là của tôi tạo ra tuyên bố

CREATE TABLE ContactUs (id BIGINT auto_increment, 
         userName VARCHAR(30), 
         email VARCHAR(50), 
         subject VARCHAR(100), 
         message VARCHAR(1024), 
         messageType VARCHAR(15), 
         contactUsTime datetime, 
         primary key(id)) 
         TYPE=InnoDB; 
+0

các đoạn mã của bạn, có lẽ? Liên kết – Bozho

+1

: http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion –

+1

Những ngày này bạn sẽ không còn sử dụng 'java.util.Date' nữa (trong năm 2010 có lẽ không có lựa chọn nào tốt hơn). Tốt hơn là sử dụng các lớp hiện đại, như 'java.time.Instant' hoặc' java.time.LocalDateTime', tùy thuộc vào các yêu cầu chính xác cho ngày giờ bạn cần lưu trữ. –

Trả lời

139

thấy trong liên kết:

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

Đoạn mã dưới đây chỉ giải quyết vấn đề:

java.util.Date dt = new java.util.Date(); 

java.text.SimpleDateFormat sdf = 
    new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

String currentTime = sdf.format(dt); 

này 'currentTime' đã được chèn vào cột có loại là DateTime và nó đã thành công.

+7

+1 để tiết kiệm thời gian của tôi! : D – Swayam

+3

nhưng, currentTime là một đối tượng String, và trong db chúng tôi lấy datetime như datatype, tôi nghĩ rằng nó sẽ không được chèn vào. – reddy

+1

Thật vậy! Vậy phải hoàn thành nó như thế nào??? – yaylitzis

33

Có phải bạn đang sử dụng java.sql.Date? Trong khi đó có độ chi tiết mili giây như một lớp Java (nó là một phân lớp của java.util.Date, quyết định thiết kế xấu), nó sẽ được trình điều khiển JDBC giải thích là một ngày không có thành phần thời gian. Bạn phải sử dụng java.sql.Timestamp để thay thế.

+4

+1 cho "Bạn phải sử dụng java.sql.Timestamp" –

+0

Tôi sẽ không sử dụng 'java.sql.Date' hoặc' java.sql.Timestamp' trong các lớp miền nhưng tôi đoán điều này được viết trước khi chỉnh sửa OP. –

+0

Tôi muốn. Các đối tượng java.util.Date không so sánh với các đối tượng java.sql.Timestamp với các kết quả dự đoán hoàn toàn. –

7

Có lẽ vì ngày java của bạn có một định dạng khác nhau từ mysql format (YYYY-MM-DD HH:MM:SS)

làm điều này

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
Date date = new Date(); 
System.out.println(dateFormat.format(date)); 
72

Chú thích lĩnh vực của bạn (hoặc getter) với @Temporal(TemporalType.TIMESTAMP), như thế này:

public class MyEntity { 
    ... 
    @Temporal(TemporalType.TIMESTAMP) 
    private java.util.Date myDate; 
    ... 
} 

Điều đó nên thực hiện thủ thuật.

+7

Đây là câu trả lời đúng. Nên có nhiều phiếu bầu hơn! – Niles11

+2

Đây là câu trả lời thực sự! – Perneel

+2

cho điều này, đây là câu trả lời đúng. – Ryan

5

bạn sẽ nhận được 2011/07/18 + Thời gian định dạng

long timeNow = Calendar.getInstance().getTimeInMillis(); 
java.sql.Timestamp ts = new java.sql.Timestamp(timeNow); 
... 
preparedStatement.setTimestamp(TIME_COL_INDEX, ts); 
5

mysql datetime -> GregorianCalendar

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date date = format.parse("2012-12-13 14:54:30"); // mysql datetime format 
GregorianCalendar calendar = new GregorianCalendar(); 
calendar.setTime(date); 
System.out.println(calendar.getTime()); 

GregorianCalendar -> mysql datetime

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String string = format.format(calendar.getTime()); 
System.out.println(string); 
2
java.util.Date date = new Date(); 
Object param = new java.sql.Timestamp(date.getTime());  
preparedStatement.setObject(param); 
0

Sử dụng đoạn mã sau để chèn ngày tháng vào MySQL. Thay vì thay đổi định dạng ngày tháng của chúng tôi để đáp ứng yêu cầu của MySql, chúng tôi có thể giúp cơ sở dữ liệu nhận ra ngày của chúng tôi bằng cách đặt các tham số STR_TO_DATE(?, '%l:%i %p').

Ví dụ, 2014/03/12 có thể được biểu diễn dưới dạng STR_TO_DATE('2014-03-12', '%Y-%m-%d')

preparedStatement = connect.prepareStatement("INSERT INTO test.msft VALUES (default, STR_TO_DATE(?, '%m/%d/%Y'), STR_TO_DATE(?, '%l:%i %p'),?,?,?,?,?)"); 
-2

nó làm việc cho tôi !!

trong bảng mysql

DATETIME 

trong thực thể:

private Date startDate; 

trong quá trình:

objectEntity.setStartDate(new Date()); 

trong PreparedStatement:

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime())); 
0

Thực ra bạn không thể sử dụng SimpleDateFormat, bạn có thể sử dụng một cái gì đó như thế này;

@JsonSerialize(using=JsonDateSerializer.class) 
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss") 
    private Date blkDate; 

Bằng cách này, bạn có thể trực tiếp nhận ngày có định dạng như được chỉ định.

0

của nó rất đơn giản mặc dù điều kiện trong câu trả lời này là trong mysql datatype cột là datetime và bạn muốn gửi dữ liệu từ mã java để mysql:

java.util.Date dt = new java.util .Ngày();
whatever your code object may be .setDateTime (dt);

điều quan trọng là chỉ chọn ngày và định dạng của nó đã theo định dạng mysql và gửi đi, không cần sửa đổi thêm.

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