我的数据库中有一个表有一个属性" 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]。但是,我不知道如何解决它。
答案 0 :(得分:1)
我认为您可能没有在Goal
案例类中使用正确的类型。同样通过create
函数的外观,而不是在这里使用字符串,我建议使用Date
或更好的org.joda.time.DateTime
(默认情况下应该在那里)在Play)。
如果我没有记错的话,Anorm应该有必要的转换器来处理DateTime
输入,也在表单中。
答案 1 :(得分:0)
对于每种方法,连接都不是性能方面的。 请注意,在Connection中,您有一个Session,并且在Session中有一个Transaction。 关闭并重新打开这些非常“昂贵”。