2016-03-23 6 views
0

私はScalaを初めて使い、slick(3.1.1)について学んでいます。テーブルにデータを挿入するための特定のコードを書く際に、行がない場合はその行を挿入し、そのテーブルの特定の列を更新する必要があります。slickを使った挿入が機能しない

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) 
    } 

スカラで一括書き込みを行うにはどうすればよいですか?また、なぜこの一括操作は機能しませんか?どんな助けでも大歓迎です。

答えて

0

2部構成の質問に対する2部回答です。

スカラーで一括書き込みを行うにはどうすればよいですか?

SQLでは一括更新はできません。それは単にサポートされていません。ただし、一括挿入することはできます。 Slickは、++=演算子を使用している一括挿入をTableQueryにサポートしています。

なぜこの一括処理は機能しませんか?

DBIOの値を生成していますが、db.run()で実行していません。 DBIOは、Scala操作のSQLへのマッピングですが、データベースに送る前に実行する必要があります。

関連する問題