Ошибка базы данных в помещении «База данных заблокирован».Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка базы данных в помещении «База данных заблокирован».

Сообщение Anonymous »

Я пытаюсь скопировать часть базы данных на основе заданных ключей, а затем написать в файл. Похоже, что цикл, который копирует по таблицам temp_db , не завершается к моменту, когда вызовет базу данных . Затем я бы получил (1) оператор прерывания в 4: [Отделение базы данных TEMP_DB] TEMP_DB заблокирована ошибка. Я думал, что вызовы execSQL блокируются и не должны возвращаться, пока они не будут выполнены? Если не так, как я могу ждать выполнения выполнения, прежде чем вызовать базу данных ?

Код: Выделить всё

val tempFile = File.createTempFile("temp", ".db")

if (!tempFile.isFile) {
Timber.d("IdentifyRoomDatabase.getPartialExportFile.tempFile not there: $tempFile")
}
try {

val db = openHelper.writableDatabase

runInTransaction {

db.execSQL("ATTACH DATABASE ? AS temp_db", arrayOf(tempFile.absolutePath))

val tables: MutableList = mutableListOf()
var cursor = db.query("SELECT name FROM sqlite_master WHERE type='table'")
while (cursor.moveToNext()) {
tables.add(cursor.getString(0))
}
val internalTables = listOf("sqlite_master", "sqlite_sequence", "room_master_table", "android_metadata")
tables.removeAll(internalTables)
cursor.close()

tables.map {
db.execSQL(
"CREATE TEMP TABLE temp_$it AS SELECT * FROM 'person' WHERE id IN (${personsList.joinToString(",")})"
)
}

tables.map {
db.execSQL("CREATE TABLE IF NOT EXISTS temp_db.$it AS SELECT * FROM temp_$it")
}

tables.map {
db.execSQL("DROP TABLE temp_$it")
}

db.execSQL("DETACH DATABASE temp_db")
}

return tempFile
} catch (e: Throwable) {
tempFile.delete()
throw e
}
Я попытался перемещать прикрепление и отделить вызовы за пределами runintransaction , но это приводит к неизвестной базе данных 'temp_db' ошибка. < Br/> Я проверил команды SQL непосредственно в sqlite3 в CLI, и они выполняются правильно без ошибки.

Подробнее здесь: https://stackoverflow.com/questions/794 ... cked-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»