Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite数据库从Android emulator中消失_Android_Sqlite_Android Emulator_Kotlin - Fatal编程技术网

SQLite数据库从Android emulator中消失

SQLite数据库从Android emulator中消失,android,sqlite,android-emulator,kotlin,Android,Sqlite,Android Emulator,Kotlin,我在Android Studio 3.0.1中工作,并使用Android emulator查看应用程序如何运行。我的应用程序使用了SQLite数据库,但在Android Studio或其组件模拟器更新后,启动时显示消息“正在执行的干净启动快照不存在”。我的数据库从应用程序中消失了。这是Android emulator上的擦除还是我在数据库编程中犯了一些错误?这种故障会发生在真正的设备上吗 import android.content.ContentValues import android.co

我在Android Studio 3.0.1中工作,并使用Android emulator查看应用程序如何运行。我的应用程序使用了SQLite数据库,但在Android Studio或其组件模拟器更新后,启动时显示消息“正在执行的干净启动快照不存在”。我的数据库从应用程序中消失了。这是Android emulator上的擦除还是我在数据库编程中犯了一些错误?这种故障会发生在真正的设备上吗

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 dbQuery(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 dbQueryArray(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
    }

}
  
导入android.content.ContentValues
导入android.content.Context
导入android.database.Cursor
导入android.database.sqlite.SQLiteDatabase
导入android.database.sqlite.SQLiteOpenHelper
导入android.database.sqlite.SQLiteQueryBuilder
导入android.widget.Toast
导入android.database.SQLException
导入kotlin.collections.ArrayList
类DbManagerVol{
var dbName=Const.DB\u NAME
var dbTable:字符串?=null
val dbVersion=2
var sqlCreateTable:字符串?=null
var sqlDB:SQLiteDatabase?=null
构造函数(上下文:context,dbTable:String?,sqlCreateTable:String?){
this.sqlCreateTable=sqlCreateTable
this.dbTable=dbTable
val db=DataBaseHelperVol(上下文)
sqlDB=db.writeabledatabase
如果(sqlCreateTable!=null)sqlDB!!.execSQL(sqlCreateTable)
}
内部类DataBaseHelperVol:SQLiteOpenHelper{
变量上下文:上下文?=null
构造函数(context:context):超级(context,dbName,null,dbVersion){
this.context=context
}
重写onCreate(db:SQLiteDatabase?){
db!!.execSQL(sqlCreateTable)
Toast.makeText(this.context,“创建数据库$dbName”,Toast.LENGTH\u LONG.show())
}
重写更新(db:SQLiteDatabase?,旧版本:Int,新版本:Int){
db!!.execSQL(“如果存在$dbTable,则删除表”)
}
}
fun dbInsert(值:ContentValues):长{
val ID=sqlDB!!.insert(dbTable,“,值)
返回ID
}
有趣的数据库查询(投影:数组,选择:字符串,选择:数组,排序器:字符串):光标{
val qb=SQLiteQueryBuilder()
qb.tables=dbTable
变量游标:游标?=null
试一试{
cursor=qb.query(sqlDB、projection、selection、selectionArgs、null、null、sortOrder)
}捕获(e:异常){}
返回光标!!
}
fun dbQueryArray(投影:数组,选择:字符串,选择:数组,排序器:字符串,
spUndefined:String,spad:String,spdelite:String):ArrayList{
val listSpinner:ArrayList?=ArrayList()
val qb=SQLiteQueryBuilder()
qb.tables=dbTable
试一试{
val cursor:cursor?=qb.query(sqlDB、投影、选择、selectionArgs、null、null、sortOrder)
if(游标!!.moveToFirst()){
做{
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)
}
返回listSpinner!!
}
fun dbRowDelete(colName:String,value:String):Int{
sqlDB!!.execSQL(sqlCreateTable)
val str2=“$colName=”$value“
返回sqlDB!!.delete(dbTable,str2,null)
}
fun dbLastRowInt(dbTable:String,column:String):Int{
val selectQuery=“按$column DESC LIMIT 1从$dbTable ORDER中选择*
val cursor=sqlDB!!.rawQuery(selectQuery,null)
变量a=0
if(cursor.moveToFirst())
a=cursor.getInt(cursor.getColumnIndex(column))
cursor.close()
归还
}
fun dbUpdateRow(表:String,值:ContentValues,colName:String,值:Int):Int{
返回sqlDB!!.update(表,值,“$colName=$value”,null)
}
fun dbDelTable(){
sqlDB!!.execSQL(“如果存在$dbTable,则删除表”)
}
fun dbRowsDelete(colName:String,value:Array):Int{
sqlDB!!.execSQL(sqlCreateTable)
val占位符=StringBuilder()
对于(i在0中,直到值.size){
如果(i!=0)
占位符。追加(“,”)
占位符。追加(“?”)
}
val where=“$colName IN”(“+占位符.toString()+”)
返回sqlDB!!.delete(dbTable,其中,值)
}
fun countTables():ArrayList{
val数组=ArrayList()
val c=sqlDB!!.rawQuery(“从sqlite_master中选择名称,其中type='table',null)
if(c.moveToFirst()){
而(!c.isAfterLast){
add(c.getString(c.getColumnIndex(“name”))
c、 moveToNext()
}
}
返回数组
}
}

您的
onUpgrade
方法的
DataBaseHelperVol
只包含拖放指令。这意味着数据库的第一个版本更新将只清理数据。可能您需要再次执行
sqlCreateTable
指令,但我不知道您想要什么


我猜您不了解SQLite数据库生命周期

“我在数据库编程中犯了一些错误”如果没有任何代码,人们怎么能分析它?你做了什么?你安装了应用程序,然后清除了仿真器数据。我不认为问题真正出在代码上。我没有手动擦除任何内容。如果您更新系统映像,该模拟器中的所有数据都将被清除。谢谢回答,我将更正这一行。但我从未更改过数据库版本。据我所知,onUpgrade方法是在版本更改时调用的。在出现“正在执行的干净启动快照不存在”消息之前,我没有遇到这个问题。