我一直在绞尽脑汁地思考 usingexecuteUpdate()与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")
}
Run Code Online (Sandbox Code Playgroud)
我遇到以下问题: Java.lang.RuntimeException: TypeDoesNotMatch(无法将 2013-04-15 13:58:46.0:class java.sql.Timestamp 转换为 Long for 列 ColumnName(密度_cache.day_of,Some(day_of)))
但当我切换到 时executeUpdate(),它工作得很好。
不同之处在于,executeInsert它将返回自动生成的密钥(如果有)。
Anorm,简单的 SQL 数据访问 => 执行 SQL 查询
如果您要插入具有自动生成的
Long主键的数据,您可以调用executeInsert(). 如果您有多个生成的密钥,或者它不是 Long,executeInsert可以传递 aResultSetParser以返回正确的密钥。
在你的情况下,我猜测/假设你没有自动递增的主键,因此它不能与executeInsert(). 如果有,那么您可能必须传递ResultSetParser正确类型的 a 。