我一直在讨论使用executeUpdate()
而不是executeInsert()
之间的区别。
在以下代码中,我使用了executeInsert()
def addEntry(day: DateMidnight, create_time: DateTime, points: Long, src: String) = DB.withTransaction { implicit connection =>
Logger.debug("I got here")
SQL(
"""
INSERT INTO density_cache(day_of, create_time, points, src)
VALUES ({day_of}, {create_time}, {points}, {src})
"""
).on(
'day_of -> day,
'create_time -> create_time,
'points -> points,
'src -> src
).executeInsert()
Logger.debug("Got to 2nd step")
}
我遇到以下问题: Java.lang.RuntimeException:TypeDoesNotMatch(无法将2013-04-15 13:58:46.0:类java.sql.Timestamp转换为Long为列ColumnName(density_cache.day_of,Some(day_of)))
但是当我切换到executeUpdate()
时,它运行正常。
答案 0 :(得分:3)
不同之处在于executeInsert
将返回自动生成的密钥(如果有的话)。
Anorm, simple SQL data access => Executing SQL queries
如果要插入包含自动生成的
Long
主键的数据,则可以调用executeInsert()
。如果您有多个生成密钥,或者它不是长密钥,则可以executeInsert
传递ResultSetParser
以返回正确的密钥。
在您的情况下,我猜/假设您没有自动递增的主键,因此它不适用于executeInsert()
。如果你有,那么你可能需要传递一个ResultSetParser
的正确类型。