我是Scala的新手并且一直在学习光滑(3.1.1)。在编写特定代码以将数据插入表时,如果不存在则必须插入一行,否则更新该表中的特定列。对于单行更新,我编写了以下代码,它可以正常工作:
def updateDate(id: Int, country : Country, lastDate: DateTime)(implicit ec: ExecutionContext) =
byPKC.applied((id, country, )).map(_.lastMessageDate).update(lastDate) flatMap {
case 0 ⇒
create(User.withLastDate(id, country, lastDate))
case x ⇒ DBIO.successful(x)
}
现在我不确定如何在scala中执行批量操作。我尝试了以下,虽然效率低,但应该可以工作,但没有行插入表中。
def updateDates(ids: Set[Int], country: Country, lastDate: DateTime)(implicit ec: ExecutionContext) = {
ids.foreach(e ⇒ updateDate(e, country, lastDate))
DBIO.successful(1)
}
如何在scala中进行批量写入?另外,为什么这个批量操作不起作用?任何帮助将非常感激。
答案 0 :(得分:0)
这个由两部分组成的问题分为两部分。
如何在scala中进行批量写入?
您不能在SQL中进行批量更新;它根本不受支持。但是,您可以批量插入。 Slick支持在++=
上使用TableQuery
运算符批量插入。
为什么这种批量操作不起作用?
您正在生成DBIO
值,但您没有通过db.run()
执行这些值。 DBIO
是Scala操作到SQL的映射,但您必须在将其发送到数据库之前执行它。