暴露的 SQLite 连接因 SQLITE_BUSY 而失败
Posted
技术标签:
【中文标题】暴露的 SQLite 连接因 SQLITE_BUSY 而失败【英文标题】:Exposed SQLite connection fails with SQLITE_BUSY 【发布时间】:2020-06-09 20:04:04 【问题描述】:我正在尝试使用 Ktor 构建应用程序并使用 SQLite 公开。不幸的是,我的应用程序不断崩溃。
这是我的数据库连接:
class DatabaseFactory(connection: DatabaseConnection)
init
connect()
createSchema()
private fun connect()
Database.connect("jdbc:sqlite:/path/to/file", "org.sqlite.JDBC")
TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE
private fun createSchema()
transaction
SchemaUtils.create(Images)
SchemaUtils.create(KeyValues)
Images.deleteAll()
suspend fun <T> dbQuery(block: () -> T): T =
withContext(Dispatchers.IO)
transaction block()
// access db with
DatabaseFactory.dbQuery
// do stuff
在运行我的应用程序时,我收到以下错误:
org.jetbrains.exposed.exceptions.ExposedSQLException: org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
【问题讨论】:
【参考方案1】:当您使用协程并在 Dispatchers.IO
中运行代码时,您的查询可以在单独的线程中执行,这些线程被视为只能从 SQLite 实例中读取的 multiple processes
。
More on SQLite docs
【讨论】:
如何确保只有一个连接?以上是关于暴露的 SQLite 连接因 SQLITE_BUSY 而失败的主要内容,如果未能解决你的问题,请参考以下文章
PyCharm 无法连接到 SQLite:SQLITE_BUSY,(数据库已锁定)
Python教程:ORM连接Sqlite数据库,软件架构基础
android 应用程序中的 Geckoview 因错误“java.lang.Exception:加载 sqlite 库时出错”而崩溃