2013-02-13 49 views
8

由于我在我的项目中使用的主题数据的性质,在输入集中频繁出现重复记录(有时它意味着在同一输入集中重复记录,并且这可以通过预处理插入过滤,但通常输入集可以包含已经在数据库中的记录重复的记录)。如何使用Slick进行INSERT IGNORE查询?

MySQL和SQLite INSERT IGNORE功能可以极大地帮助您处理此问题。

所以我有问题是:

  1. 如何使油滑使用INSERT IGNORE代替裸INSERT将数据插入MySQL或SQLite数据库是什么时候?

  2. 在本机不支持MS SQL Server的情况下使用Slick时,模拟INSERT IGNORE功能的最佳方式是什么?

+1

我建议你为Slick提出一个功能请求,我认为如果这个功能作为默认方法可用,更多的人会受益。 – EECOLOR 2013-02-18 12:06:48

回答

5

我没有使用Slick的经验。从源代码中我得知,为了使油滑的,以便能够使用INSERT IGNORE你需要执行几个步骤:

  • 扩展所需的数据库
  • 覆盖其上创建默认InsertBuilder司机通过def createInsertBuilder(node: Node): InsertBuilder。扩展它并添加一个类似于buildInsert方法的特殊方法。
  • 覆盖通过def createCountingInsertInvoker[T, U](u: ShapedValue[T, U])创建的默认InsertInvoker。扩展它,并从FullInsertInvoker

添加insertIgnore这应该是类似于def insert[TT](query: Query[TT, U])(implicit session: Session): RetQuery至于你的第二个问题。在不支持INSERT IGNORE的解决方法的实施是数据库相关的,谷歌将帮助您找到不同的实现。由于上述添加INSERT IGNORE的方法是独立于驱动程序的,因此可以使用相同的结构为任何数据库添加功能。