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)

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

如果我从文本文件中填写数据库,数据库是否仍然只存在于内存中?如果是这样,我将如何将其传输到磁盘?我什至在正确的轨道上吗?

4

1 回答 1

1

Slick 不会在任何地方“存储”数据库。Slick 是一个库,它允许您访问数据库中的数据。在这种情况下,您通常使用 jdbc“连接 url”(例如“jdbc:h2:mem:test1”)指定要连接的数据库。Jdbc 是用于访问关系数据库的标准 Java API,并且有很多数据库都存在 jdbc 驱动程序。

因此,在使用 Slick 时,您将选择要使用的数据库:h2、postgres、mysql、oracle、sql server 等。您应该查阅您选择的数据库的文档以了解它存储您的位置数据。

我相信 Slick 选择使用 h2 作为入门示例的原因是 h2 可以在“内存模式”下运行,其中数据仅保存在内存中。在这种模式下,数据纯粹是暂时的,并且在程序终止时会丢失。另一方面,在数据存储在磁盘上的持久模式下运行 h2 也很容易。此外,您可以选择“嵌入式”或“客户端/服务器”运行数据库。

您确实应该查阅 h2 文档以了解更多信息(http://www.h2database.com/html/main.html)。特别是,jdbc 连接 url 使您可以控制是否连接到瞬态、内存中的实例、嵌入式实例或远程实例。请参阅http://www.h2database.com/html/features.html#database_url

于 2015-07-09T00:59:36.560 回答