0

我正在尝试使用 Ktor 和 Exposed with 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)
4

1 回答 1

0

当您使用协程并在Dispatchers.IO查询中运行代码时,可以在单独的线程中执行,这些线程被视为multiple processes只能从 SQLite 实例中读取。

更多关于 SQLite 文档

于 2020-02-26T07:28:41.407 回答