繁体   English   中英

Anorm Scala executeUpdate和executeInsert之间的区别

[英]Anorm Scala Difference between executeUpdate and executeInsert

我一直在讨论使用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() ,它工作正常。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM