База данных SQLite исчезла из эмулятора Android

Я работаю в Android Studio 3.0.1 и с помощью эмулятора Android, чтобы увидеть, как работает приложение. У меня была база данных SQLite для моего приложения, но после обновления Android Studio или, возможно, ее эмулятор компонентов начался с сообщения «выполнение моментального снимка чистой загрузки не существует». Моя база данных исчезла из приложения. Это что-то протирать на эмуляторе Android, или я ошибся в программировании базы данных? Может ли эта проблема возникнуть на реальном устройстве?

import android.content.ContentValues import android.content.Context import android.database.Cursor import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import android.database.sqlite.SQLiteQueryBuilder import android.widget.Toast import android.database.SQLException import kotlin.collections.ArrayList class DbManagerVol { var dbName=Const.DB_NAME var dbTable:String? = null val dbVersion = 2 var sqlCreateTable:String? = null var sqlDB:SQLiteDatabase? = null constructor (context: Context, dbTable:String?, sqlCreateTable:String?) { this.sqlCreateTable = sqlCreateTable this.dbTable = dbTable val db = DataBaseHelperVol(context) sqlDB=db.writableDatabase if(sqlCreateTable!=null)sqlDB!!.execSQL(sqlCreateTable) } inner class DataBaseHelperVol:SQLiteOpenHelper { var context:Context?=null constructor(context: Context):super(context,dbName,null,dbVersion){ this.context=context } override fun onCreate(db: SQLiteDatabase?) { db!!.execSQL(sqlCreateTable) Toast.makeText(this.context, "database $dbName is created", Toast.LENGTH_LONG).show() } override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { db!!.execSQL("Drop table IF EXISTS $dbTable") } } fun dbInsert(values:ContentValues):Long{ val ID = sqlDB!!.insert(dbTable, "", values) return ID } fun dbQuerry(projection: Array<String>, selection:String, selectionArgs:Array<String>, sortOrder:String):Cursor?{ val qb = SQLiteQueryBuilder() qb.tables=dbTable var cursor:Cursor? = null try { cursor = qb.query(sqlDB, projection, selection, selectionArgs, null, null, sortOrder) }catch (e:Exception){} return cursor!! } fun dbQuerryArray(projection: Array<String>, selection:String, selectionArgs:Array<String>, sortOrder:String, spUndefined:String, spAdd:String, spDelete:String):ArrayList<String>{ val listSpinner:ArrayList<String>? = ArrayList<String>() val qb = SQLiteQueryBuilder() qb.tables=dbTable try { val cursor:Cursor? = qb.query(sqlDB, projection, selection, selectionArgs, null, null, sortOrder) if (cursor!!.moveToFirst()) { do { val str = cursor.getString(cursor.getColumnIndex(sortOrder)) listSpinner!!.add(str) } while (cursor.moveToNext()) } listSpinner!!.add(spUndefined) listSpinner.add(spAdd) listSpinner.add(spDelete) } catch (e:SQLException) { listSpinner!!.add(spUndefined) listSpinner.add(spAdd) listSpinner.add(spDelete) } return listSpinner!! } fun dbRowDelete(colName:String, value:String):Int { sqlDB!!.execSQL(sqlCreateTable) val str2 = "$colName='$value'" return sqlDB!!.delete(dbTable, str2, null) } fun dbLastRowInt(dbTable:String, column:String):Int { val selectQuery= "SELECT * FROM $dbTable ORDER BY $column DESC LIMIT 1" val cursor = sqlDB!!.rawQuery(selectQuery, null) var a = 0 if(cursor.moveToFirst()) a = cursor.getInt( cursor.getColumnIndex(column) ) cursor.close() return a } fun dbUpdateRow (table:String, values: ContentValues, colName:String, value:Int):Int { return sqlDB!!.update(table, values, "$colName = $value", null) } fun dbDelTable () { sqlDB!!.execSQL("Drop table IF EXISTS $dbTable") } fun dbRowsDelete(colName:String, values:Array<String>):Int { sqlDB!!.execSQL(sqlCreateTable) val placeholders = StringBuilder() for (i in 0 until values.size) { if (i != 0) placeholders.append(", ") placeholders.append("?") } val where = "$colName IN (" + placeholders.toString() + ")" return sqlDB!!.delete(dbTable, where, values) } fun countTables () :ArrayList<String>{ val array = ArrayList<String>() val c = sqlDB!!.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null) if (c.moveToFirst()) { while ( !c.isAfterLast) { array.add( c.getString( c.getColumnIndex("name")) ) c.moveToNext() } } return array } } 

Ваш метод onUpgrade для DataBaseHelperVol содержит только инструкции drop. Это означает, что обновление первой версии базы данных просто очистит данные. sqlCreateTable вам нужно снова sqlCreateTable инструкцию sqlCreateTable , но я не знаю, что вы здесь хотите.

Угадайте, что вы не понимаете жизненный цикл базы данных SQLite. Попытайтесь это прочитать .

Intereting Posts
Как реализовать параметризованные интерфейсы в Котлине Ошибка Android Studio XML «Соответствующий обработчик методов не найден» on onClick Как подавить проверку орфографии на константе строки в Android Kotlin? Есть ли способ потребовать, чтобы общий тип был классом данных в Котлин? IntelliJ (с использованием gradle): не удается найти плагин Kotlin, даже если он установлен Зачем нужен репозиторий и сервис + контракт Как реализовать репозиторий интерфейса в другом модуле проекта в AndroidStudio с помощью Dagger2 и Kotlin Альтернатива вложенного интерфейса в Котлине Невозможно установить Content-Type в запросе SOAP Kotlin с трудом подводит итог к предполагаемому (на месте) параметру Цвет материала для материалов Apple не применяется последовательно Ошибка android-kotlin: неразрешенные ссылки привязки данных и ActivityMainBinding Gson Map <String, Any> to Object Android, Gradle, Realm, Kotlin: Ошибка: ошибка: не удалось найти файл AndroidManifest.xml Не удалось создать проект Android после добавления класса Realm