在playframework中使用java.sql.date的问题

时间:2014-05-19 07:18:27

标签: scala date playframework-2.0

我的数据库中有一个表有一个属性" datecomplete"作为DATE类型。 像这样:

CREATE TABLE goal (
gid integer NOT NULL AUTO_INCREMENT,
datecomplete date DEFAULT NULL);

用户通过帮助表格提供日期:

@inputDate(goalForm("datecomplete"),'_label -> "Due Date", '_showConstraints -> false)

我将inputDate视为字符串。收到用户的输入后,会调用Goal.create(datecomplete)执行以下操作

 def create(datecomplete:String ) {
 DB.withConnection { implicit c =>
 SQL("INSERT INTO goal (datecomplete) VALUES ({datecomplete})"
    ).on(
    'datecomplete -> datecomplete
    ).executeUpdate()
}
}

然后当我尝试使用一些简单的SQL代码打印出我的目标时

 def all(): List[Goal] = DB.withConnection {
 implicit c => SQL("SELECT * FROM goal").as(goal *)}

它给了我这个错误

[RuntimeException: TypeDoesNotMatch(Cannot convert 2014-05-18:class java.sql.Date to String for column ColumnName(GOAL.DATECREATE,Some(DATECREATE)))]

我认为问题在于我的Goal对象将datecomplete作为String,但在数据库中它是一个Date。因此,它无法从生成的查询中生成List [Goal]。但是,我不知道如何解决它。

2 个答案:

答案 0 :(得分:1)

我认为您可能没有在Goal案例类中使用正确的类型。同样通过create函数的外观,而不是在这里使用字符串,我建议使用Date或更好的org.joda.time.DateTime(默认情况下应该在那里)在Play)。

如果我没有记错的话,Anorm应该有必要的转换器来处理DateTime输入,也在表单中。

答案 1 :(得分:0)

对于每种方法,连接都不是性能方面的。 请注意,在Connection中,您有一个Session,并且在Session中有一个Transaction。 关闭并重新打开这些非常“昂贵”。