暴露的 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数据库,软件架构基础

Docker配置TLS认证,修复因暴露2375端口引发漏洞

2016年应该使用SQLite的5大原因

android 应用程序中的 Geckoview 因错误“java.lang.Exception:加载 sqlite 库时出错”而崩溃

EasyNVR 因 sqlite 数据库过大导致访问网页卡顿的优化方案