2014-05-19 3 views
0

Slick을 사용하여 데이터베이스에 간단한 삽입하는 방법을 이해할 수 없습니다. 나는 오라클 db와 함께 테이블 생성기를 사용하고 있는데 다음과 같은 것을 얻고있다.리프팅 쿼리 및 옵션 열을 사용하여 간단하게 매끄럽게 삽입하는 방법

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

그런 다음 기본 키에 AutoInc 옵션을 추가한다.

TableQuery [Simulaton] .map 또는 InsertInvoker를 사용하여 'insert'변형을 시도했지만 코드를 컴파일 할 수 없습니다.

어떻게 작동합니까?

필자는 autoincremental PK와 columns - code, startDate로 '삽입'을해야합니다.

답변

0
// 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))) 

} 
대안
+0

과부하있어서 값 인서트 : [오류] TT (쿼리 scala.slick.lifted.Query [TT (문자열 옵션 [의 java.sql.Timestamp])]) (암시 세션 : 오류 : (값 : (문자열, 옵션 [java.sql.Timestamp])) (암시 적 세션 : scala.slick.jdbc.JdbcBackend # SessionDef) int [ (오류)] [오류]. 오류 (.processId, 지금) [오류]^ –

+0

나는 'id'열에 Option []에서 중괄호를 써야한다고 생각합니다. 삽입 문에서 무시되지만 모델을 변경하는 방법을 이해할 수 없다. –

+0

swer. 유형 오류는 Slick에서 무언가 실패 할 때 약간 무서워 할 수 있습니다. 유형과 옵션이 일치하는지 확인하십시오. 인라인 형식 어소시에이션도 도움이 될 수 있습니다. – cvogt

관련 문제