【发布时间】:2018-01-13 05:22:52
【问题描述】:
按照Exposed 上提供的示例,我无法在创建它的事务之外读取创建的表/数据。我正在使用 h2-in-memory 数据库。
例外是:
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "CITIES" not found; SQL statement:
我添加了一个提交调用,但这没有帮助。如果我在创建数据的事务中读取数据,如 github 链接上的示例所示,它可以正常工作。这是它的简化版本:
fun main(args: Array<String>) {
Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
transaction {
create(Cities)
City.new {
name = "St. Petersburg"
}
println("Cities: ${City.all().joinToString { it.name }}")
//I have added this commit here
commit()
}
//I want to read the data outside the transaction, but it does not work
transaction {
println("Cities: ${City.all().joinToString { it.name }}")
}
}
如何保存数据?
添加logger.addLogger(StdOutSqlLogger) 会得到以下输出:
SQL: CREATE TABLE IF NOT EXISTS CITIES (ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(50) NOT NULL)
SQL: INSERT INTO CITIES (NAME) VALUES ('St. Petersburg')
SQL: SELECT CITIES.ID, CITIES.NAME FROM CITIES
【问题讨论】:
-
该异常基本上是说您在数据库中没有表 CITIES。你确定是 h2 数据库为你创建的吗?
-
是的,在创建表和行的事务中的第一次读取工作正常并打印出 Cities: St. Petersburg。表和行已正确创建,但由于某种原因在关闭第一个事务后无法访问。
-
我在这里查看h2database.com/html/faq.html 以获得一些答案。对您来说有趣的部分是标题为“数据库文件存储在哪里?”的部分。你能在你的电脑上找到这些文件吗?
-
我将它用作内存数据库:jdbc:h2:mem:test
标签: transactions kotlin kotlin-exposed