【问题标题】:Is there any way to do multiple inserts/updates in Slick?有没有办法在 Slick 中进行多次插入/更新?
【发布时间】:2013-10-07 13:53:06
【问题描述】:

在 sql 中我们可以这样做:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

有没有办法在 Slick 中进行多次/批量/批量插入或更新?

我们可以做类似的事情,至少使用 SQL plain queries 吗?

【问题讨论】:

    标签: sql scala slick


    【解决方案1】:

    对于插入,正如 Andrew 所回答的,您使用 insertALL。

      def insertAll(items:Seq[MyCaseClass])(implicit session:Session) = {
        (items.size) match {
          case s if s > 0 =>
            try {
              // basequery is the tablequery object
              baseQuery.insertAll(tempItems :_*)
            } catch {
              case e:Exception => e.printStackTrace()
            }
          Some(tempItems(0))
            case _ => None
        }
      }
    

    对于更新,您是 SOL。查看Scala slick 2.0 updateAll equivalent to insertALL? 了解我最终做了什么。换个说法,代码如下:

      private def batchUpdateQuery = "update table set value = ? where id = ?"
    
      /**
       * Dropping to jdbc b/c slick doesnt support this batched update
       */
      def batchUpate(batch:List[MyCaseClass])(implicit session:Session) = {
        val pstmt = session.conn.prepareStatement(batchUpdateQuery)
    
        batch map { myCaseClass =>
          pstmt.setString(1, myCaseClass.value)
          pstmt.setString(2, myCaseClass.id)
          pstmt.addBatch()
        }
    
        session.withTransaction {
          pstmt.executeBatch()
        }
      }
    

    【讨论】:

      【解决方案2】:

      在 Slick 中,您可以对 Table 使用 insertAll 方法。 Slick 网站的入门页面中给出了 insertAll 的示例。

      http://slick.typesafe.com/doc/0.11.1/gettingstarted.html

      【讨论】:

      • 我没有任何关于更新的信息。我四处寻找,什么也没看到。我想说,根据我的研究一无所获,这是不可能的,但我不想提供错误信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多