4

我一直在为 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")
}

我遇到以下问题:Java.lang.RuntimeException: TypeDoesNotMatch(Cannot convert 2013-04-15 13:58:46.0:class java.sql.Timestamp to Long for column ColumnName(density_cache.day_of,Some(day_of)))

但是当我切换到 时executeUpdate(),它工作正常。

4

1 回答 1

3

不同之处在于executeInsert它将返回自动生成的密钥(如果有的话)。

Anorm,简单的 SQL 数据访问 => 执行 SQL 查询

如果您要插入具有自动生成的Long主键的数据,您可以调用executeInsert(). 如果您有多个生成的密钥,或者它不是一个 Long,executeInsert可以传递一个ResultSetParser来返回正确的密钥。

在您的情况下,我猜/假设您没有自动递增的主键,因此它不适用于executeInsert(). 如果你有,那么你可能必须传递ResultSetParser正确类型的 a 。

于 2013-04-16T06:49:35.990 回答