我在设置Slick 2.0.2时遇到了一些问题。我在一个会话中执行的任何配置都会丢失。例如,在第一个会话中,我创建表并添加三个人:
// H2 in-memory database
lazy val db = Database.forURL("jdbc:h2:mem:contacts", driver="org.h2.Driver")
// Contacts table
lazy val contacts = TableQuery[ContactsSchema]
// Initial session
db withSession { implicit session =>
contacts.ddl.create
// Inserts sample data
contacts += Person("John", "123 Main street", 29)
contacts += Person("Greg", "Neither here nor there", 40)
contacts += Person("Michael", "Continental U.S.", 34)
// Successfully retrieves data
contacts foreach { person =>
println(person)
}
}
一切都很顺利。输出重复我添加的三个人。当我开始新会议时,我开始遇到问题。
// New session in which the previous data is lost
db withSession { implicit session =>
contacts foreach { person =>
println(person)
}
}
上述块会创建org.h2.jdbc.JdbcSQLException: Table "CONTACTS" not found
例外。如果我编辑如下
db withSession { implicit session =>
contacts.ddl.create
contacts foreach { person =>
println(person)
}
}
然后删除所有数据。
我看到Scalatra guide to Slick使用了与我相似的配置。我究竟做错了什么?如何在会话之间保持数据持续存在?我使用内存数据库的事实是否与它有关?
答案 0 :(得分:1)
两种选择。
创建会话并保持打开状态。这可以通过调用堆栈上的withSession范围或db.createSession来完成。
或者将;DB_CLOSE_DELAY=-1
添加到数据库网址。只要vm运行,这就会使db保持活动状态。
请参阅http://www.h2database.com/html/features.html#in_memory_databases