简体   繁体   English

如何使用提升查询和选项列进行简单的平滑插入

[英]How make simple slick insert with Lifted query and Option columns

I can't seem to understand how to make a simple insert into a Database using Slick. 我似乎无法理解如何使用Slick将简单插入数据库中。 I'm using tables generator with my Oracle db and I'm getting something like this: 我在我的Oracle数据库中使用表生成器,并且得到了以下信息:

 case class SimulatonRow(id: scala.math.BigDecimal, startDate: Option[java.sql.Timestamp], endDate: Option[java.sql.Timestamp], numberOfProc: Option[scala.math.BigDecimal], code: String)
  /** GetResult implicit for fetching SimulatonRow objects using plain SQL queries */
  implicit def GetResultSimulatonRow(implicit e0: GR[scala.math.BigDecimal], e1:     GR[Option[java.sql.Timestamp]], e2: GR[Option[scala.math.BigDecimal]], e3: GR[String]): GR[SimulatonRow] = GR{
prs => import prs._
SimulatonRow.tupled((<<[scala.math.BigDecimal], <<?[java.sql.Timestamp], <<?[java.sql.Timestamp], <<?[scala.math.BigDecimal], <<[String]))
  }
 class Simulaton(tag: Tag) extends Table[SimulatonRow](tag, Some("BPRISK"), "SIMULATON") {
def * = (id, startDate, endDate, numberOfProc, code) <> (SimulatonRow.tupled, SimulatonRow.unapply)
/** Maps whole row to an option. Useful for outer joins. */
def ? = (id.?, startDate, endDate, numberOfProc, code.?).shaped.<>({r=>import r._; _1.map(_=> SimulatonRow.tupled((_1.get, _2, _3, _4, _5.get)))}, (_:Any) =>  throw new Exception("Inserting into ? projection not supported."))

/** Database column ID PrimaryKey */
val id: Column[scala.math.BigDecimal] = column[scala.math.BigDecimal]("ID", O.PrimaryKey, O.AutoInc)
/** Database column START_DATE  */
val startDate: Column[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("START_DATE")
/** Database column END_DATE  */
val endDate: Column[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("END_DATE")
/** Database column NUMBER_OF_PROC  */
val numberOfProc: Column[Option[scala.math.BigDecimal]] = column[Option[scala.math.BigDecimal]]("NUMBER_OF_PROC")
/** Database column CODE  */
val code: Column[String] = column[String]("CODE")
  }

Then I add AutoInc option to the primary key. 然后,我将AutoInc选项添加到主键。

I tried variations of 'insert' with TableQuery[Simulaton].map or InsertInvoker, but the code cannot be compiled. 我使用TableQuery [Simulaton] .map或InsertInvoker尝试了“插入”的变体,但是无法编译代码。

How does it work? 它是如何工作的?

I need to make an 'insert' with autoincremental PK and columns - code, startDate. 我需要使用自动增量PK和列(代码,startDate)进行“插入”。

// import driver specific stuff
import MySQLDriver.simple._

// import generated code
import Tables._

// define db connection
val db = Database.for...

// create a connection
db.withSession{ implicit session =>

    // select what should be inserted into
    TableQuery[Simulaton].map(s => (s.code,s.startDate))
                         // insert instead or running the query
                         .insert( ("some code",Some(DateTime.now)) )

}

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

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