【问题标题】:How to compare date from java to mysql timestamp field如何比较从 java 到 mysql 时间戳字段的日期
【发布时间】:2012-12-22 15:48:09
【问题描述】:

很抱歉再次发布同样的问题,但我很想知道。

我想知道我们如何将 java 中的当前日期与 mysql 中存储的日期进行比较。

存储在 MySQL 中的日期是 2013-01-04 13:15:00

当我通过获取当前日期在 java 中比较这个日期时

Date date = new Date();

然后写一个查询如果存储在 MySQL 中的日期小于当前显示结果。但查询在列表中返回 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;
}

}

它会抛出异常

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"

【问题讨论】:

    标签: java jpa ejb eclipselink


    【解决方案1】:

    JPQL 中的日期比较可以通过以下方式完成。

    如果您要与当前日期和时间进行比较

    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);
    

    【讨论】:

    • CURRENT_TIMESTAMP 会是什么?我也尝试过传递时间戳,但它会引发异常。 java.sql.Timestamp t = new Timestamp(date.getTime());
    • CURRENT_TIMESTAMP 指定当前时间默认值。您可以直接在查询中使用,无需任何参数。看到这个stackoverflow.com/questions/6597588/…
    • 感谢 vels4j。但是如果我想通过参数怎么办?然后我必须创建一个 TimeStamp 对象,然后传递给查询?因为当我这样做时会引发异常。
    • 不,它已经完成了query.setParameter("time", new Date(), TemporalType.TIMESTAMP);
    • @vels4j...我现在已经尝试过解决方案。它引发异常。类 [class java.lang.String] 的对象 [65464533565] 无法转换为 [class java.lang.Integer]。
    猜你喜欢
    • 2012-12-20
    • 2012-12-22
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多