· 8 years ago · Jun 18, 2018, 08:18 AM
1/* library dependecies
2 "org.xerial" % "sqlite-jdbc" % "3.23.1",
3 "org.tpolecat" %% "doobie-core" % "0.5.3",
4 "org.tpolecat" %% "doobie-hikari" % "0.5.3", // HikariCP transactor.
5 "org.tpolecat" %% "doobie-specs2" % "0.5.3", // Specs2 support for typechecking statements.
6 "org.tpolecat" %% "doobie-scalatest" % "0.5.3", // ScalaTest support for typechecking statements.
7*/
8object TryDoobie extends App {
9
10 import doobie._
11 import doobie.implicits._
12 import cats._
13 import cats.data._
14 import cats.effect.IO
15 import cats.implicits._
16
17 val xa = Transactor.fromDriverManager[IO](
18 "org.sqlite.JDBC", "jdbc:sqlite:sample.db", "", ""
19 )
20
21 val y = xa.yolo
22 import y._
23
24 val drop =
25 sql"""
26 DROP TABLE IF EXISTS person
27 """.update.run
28
29 val create =
30 sql"""
31 CREATE TABLE person (
32 name TEXT NOT NULL UNIQUE,
33 age INTEGER
34 )
35 """.update.run
36
37 val res = (drop, create).mapN(_ + _).transact(xa).unsafeRunSync
38 println(res)
39
40 def insert1(name: String, age: Option[Short]): Update0 =
41 sql"insert into person (name, age) values ($name, $age)".update
42
43 insert1("Alice", Some(12)).run.transact(xa).unsafeRunSync
44 insert1("Bob", None).quick.unsafeRunSync // switch to YOLO mode
45
46 case class Person(id: Long, name: String, age: Option[Short])
47
48 val l = sql"select rowid, name, age from person".query[Person].to[List].transact(xa).unsafeRunSync
49 l.foreach(println)
50}