База данных 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. Попытайтесь это прочитать .