我的数据库存储在 Slick 中的什么位置? [Scala][Slick 3.0]

Where is my database stored in Slick? [Scala][Slick 3.0]

我不是特别确定这是否是一个有效的问题,但我想知道我的数据库在 Slick 中的确切存储位置

例如,如果我按照 http://slick.typesafe.com/doc/3.0.0/gettingstarted.html

中的示例

他们创建表格:

// Definition of the SUPPLIERS table
class Suppliers(tag: Tag) extends Table[(Int, String, String, String, String, String)](tag, "SUPPLIERS") {
  def id = column[Int]("SUP_ID", O.PrimaryKey) // This is the primary key column
  def name = column[String]("SUP_NAME")
  def street = column[String]("STREET")
  def city = column[String]("CITY")
  def state = column[String]("STATE")
  def zip = column[String]("ZIP")
  // Every table needs a * projection with the same type as the table's type parameter
  def * = (id, name, street, city, state, zip)
}
val suppliers = TableQuery[Suppliers]

// Definition of the COFFEES table
class Coffees(tag: Tag) extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES") {
  def name = column[String]("COF_NAME", O.PrimaryKey)
  def supID = column[Int]("SUP_ID")
  def price = column[Double]("PRICE")
  def sales = column[Int]("SALES")
  def total = column[Int]("TOTAL")
  def * = (name, supID, price, sales, total)
  // A reified foreign key relation that can be navigated to create a join
  def supplier = foreignKey("SUP_FK", supID, suppliers)(_.id)
}
val coffees = TableQuery[Coffees]

然后他们用

填满
 val setup = DBIO.seq(
  // Create the tables, including primary and foreign keys
  (suppliers.schema ++ coffees.schema).create,

  // Insert some suppliers
  suppliers += (101, "Acme, Inc.",      "99 Market Street", "Groundsville", "CA", "95199"),
  suppliers += ( 49, "Superior Coffee", "1 Party Place",    "Mendocino",    "CA", "95460"),
  suppliers += (150, "The High Ground", "100 Coffee Lane",  "Meadows",      "CA", "93966"),
  // Equivalent SQL code:
  // insert into SUPPLIERS(SUP_ID, SUP_NAME, STREET, CITY, STATE, ZIP) values (?,?,?,?,?,?)

  // Insert some coffees (using JDBC's batch insert feature, if supported by the DB)
  coffees ++= Seq(
    ("Colombian",         101, 7.99, 0, 0),
    ("French_Roast",       49, 8.99, 0, 0),
    ("Espresso",          150, 9.99, 0, 0),
    ("Colombian_Decaf",   101, 8.99, 0, 0),
    ("French_Roast_Decaf", 49, 9.99, 0, 0)
  )
  // Equivalent SQL code:
  // insert into COFFEES(COF_NAME, SUP_ID, PRICE, SALES, TOTAL) values (?,?,?,?,?)
)

val setupFuture = db.run(setup)

数据库是否纯粹存在于内存中?

如果我从文本文件中填写数据库,数据库是否仍然只存在于内存中? 如果是这样,我将如何将它传输到磁盘? 我在这里走对了吗?

Slick 没有 "store" 任何地方的数据库。 Slick 是一个允许您访问数据库中数据的库。您通常使用 jdbc "connection url" 指定要连接到哪个数据库,例如在本例中为 "jdbc:h2:mem:test1"。 Jdbc 是访问关系数据库的标准 Java API,并且有很多数据库存在 jdbc 驱动程序。

因此,在使用 Slick 时,您需要选择要使用的数据库:h2、postgres、mysql、oracle、sql 服务器等。您应该咨询您选择的数据库的文档,以了解它存储数据的位置。

我认为 Slick 选择使用 h2 作为入门示例的原因是 h2 可以 运行 in "memory mode",其中数据仅保存在内存中。在这种模式下,数据是纯粹的瞬态数据,当你的程序终止时就会丢失。另一方面,在数据存储在磁盘上的持久模式下 运行 h2 也非常容易。此外,您可以选择 运行 连接数据库 "embedded" 或 "client/server"。

您确实应该查阅 h2 文档以了解更多信息 (http://www.h2database.com/html/main.html). In particular, the jdbc connection url gives you control over whether to connect to a transient, in-memory instance, an embedded instance, or a remote instance. See http://www.h2database.com/html/features.html#database_url.