我的数据库存储在 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.
我不是特别确定这是否是一个有效的问题,但我想知道我的数据库在 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.