2013-01-08 95 views
2

對不起再次發佈這個相同的問題,但我很想知道。如何比較日期從java到mysql時間戳字段

我想知道我們如何比較java中的當前日期和mysql中的存儲日期。存儲在MySQL

日期爲2013-01-04 13:15:00

當我通過獲取當前日期

Date date = new Date(); 

然後寫了一個查詢,如果存儲在MySQL中的日期小於當前顯示的結果在java中比較這日期。但查詢返回的結果是列表中的結果爲0,或者在末尾粘貼了異常。

select model from abc model where model.abcStartDate <= :? and model.abcEndDate >= :? 

在「:?」日期通過 在MySQL中開始日期和結束日期是時間戳數據類型。

下面是EJB實體類

@Entity 
@Table(name = "abc_table", uniqueConstraints = {}) 
public class ABCClass implements java.io.Serializable { 

private static final long serialVersionUID = -1924961655993587546L; 

// Fields 
private Date abcStartDate; 
private Date abcEndDate; 

// Constructors 

/** default constructor */ 
public ABCClass() { 
} 


@OrderBy(value="3") 
@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "abc_start_date", unique = false, nullable = false, insertable = true, updatable = true, length = 19) 
public Date getabcStartDate() { 
    return this.abcStartDate; 
} 

public void setabcStartDate(Date abcStartDate) { 
    this.abcStartDate = abcStartDate; 
} 

@OrderBy(value="4") 
@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "abc_end_date", unique = false, nullable = false, insertable = true, updatable = true, length = 19) 
public Date getabcEndDate() { 
    return this.abcEndDate; 
} 

public void setabcEndDate(Date abcEndDate) { 
    this.abcEndDate = abcEndDate; 
} 

} 

,它拋出一個異常,在JPQL

Exception thrown from bean; nested exception is: Exception [EclipseLink-3001] (Eclipse Persistence Services - 2.2.1.v20110722-r9776): org.eclipse.persistence.exceptions.ConversionException 
Exception Description: The object [65464533565], of class [class java.lang.String], could not be converted to [class java.lang.Integer]. 
Internal Exception: java.lang.NumberFormatException: For input string: "65464533565" 

回答

0

日期比較可以通過以下方式來完成。

如果您正在使用當前的日期比較&時間

select model from abc model where model.abcStartDate >= CURRENT_TIMESTAMP 
and model.abcEndDate >= CURRENT_TIMESTAMP 

或創建一個查詢,並傳遞參數

query = em.createQuery("select model from abc model where model.abcStartDate >= 
:time and model.abcEndDate >= :time"); 
query.setParameter("time", new Date(), TemporalType.TIMESTAMP); 
+0

將是CURRENT_TIMESTAMP什麼?我也嘗試過傳遞時間戳,但它會引發異常。 java.sql.Timestamp t = new Timestamp(date.getTime()); –

+0

CURRENT_TIMESTAMP分配當前時間默認值。你可以在沒有任何參數的情況下直接用於查詢。看到這個http://stackoverflow.com/questions/6597588/on-update-current-timestamp-and-jpa – vels4j

+0

謝謝vels4j。但是如果我想傳遞參數呢?然後我必須創建一個TimeStamp對象,然後傳遞給查詢?因爲當我這樣做時會引發異常。 –