Открытое соединение SQLite завершается с SQLITE_BUSY - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать приложение, используя Ktor и Exposed с 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 Ответ

0 голосов
/ 26 февраля 2020

Когда вы используете сопрограммы и запускаете код в Dispatchers.IO, ваши запросы могут выполняться в отдельных потоках, которые обрабатываются как multiple processes, которые могут считываться только из экземпляра SQLite.

Подробнее о документах SQLite

...