Android 致命异常;SQLiteException:没有这样的列:

Android 致命异常;SQLiteException:没有这样的列:,android,sqlite,kotlin,Android,Sqlite,Kotlin,updateName()工作正常,但updateID()抛出错误 我找不到解决办法 你能检查一下我的密码,看看出了什么问题吗 DataBaseHandler.kt val DB_NAME=“DBDEMO2” val DB_VERSION=1 val TABLE\u NAME=“TABLE\u DEMO2” val COL_EMP_ID=“empId” val COL_EMP_NAME=“empName” 数据类用户(变量id:Int,变量名称:String) val list=mutableLi

updateName()工作正常,但updateID()抛出错误

我找不到解决办法

你能检查一下我的密码,看看出了什么问题吗

DataBaseHandler.kt
val DB_NAME=“DBDEMO2”
val DB_VERSION=1
val TABLE\u NAME=“TABLE\u DEMO2”
val COL_EMP_ID=“empId”
val COL_EMP_NAME=“empName”
数据类用户(变量id:Int,变量名称:String)
val list=mutableListOf(
“约翰”、“罗伯特”、“威廉”、“查尔斯”、“玛丽”、“伊丽莎白”、“玛丽亚”、“安妮”、“玛格丽特”,
“大卫”、“詹姆斯”、“理查德”、“约翰”、“乔治”、“保罗”、“苏珊”、“露丝”、“安娜”、“爱丽丝”、“多萝西”)
val CREATE_TABLE=“CREATE TABLE”+TABLE_NAME+”(“+COL_EMP_ID+”整数“+COL_EMP_NAME+”文本非空“+”)
类DataBaseHandler(上下文:context):SQLiteOpenHelper(上下文,DB\u名称,null,DB\u版本){
var db:SQLiteDatabase=writableDatabase
fun insertData(){
val cv=ContentValues()
变量id=1001
var指数=0
用于(1001..1020中的id){
cv.put(COL_EMP_ID,ID)
简历(职位名称、列表[索引])
db.insert(表格名称,空,cv)
索引++
}
}
fun modifyName(empID:Int,newName:String){
val cv=ContentValues()
cv.put(COL_EMP_NAME,newName)
数据库更新(表名,cv,列EMP ID+“=”+empID,null)
}
fun modifyID(名称:String,newEmpID:Int){
val cv=ContentValues()
cv.put(COL_EMP_ID,newEmpID)
数据库更新(表名,cv,列名+“=”+名称,空)
}
fun deleteAllData(){
db.delete(表名称,null,null)
}
fun displayData():列表{
val list=mutableListOf()
val cursor=db.query(表名称,数组(列名称,列名称),null,null,null,null,null)
if(cursor!=null&&cursor.count>0){
while(cursor.moveToNext()){
val data=User(cursor.getInt(0),cursor.getString(1))
列表.添加(数据)
}
}
cursor.close()
返回列表
}
重写onCreate(db:SQLiteDatabase?){
db?.execSQL(创建表)
Log.i(“标记”、“OnCreateTable”)
}
重写onOpen(db:SQLiteDatabase?){
超级开放(db)
Log.i(“标记”、“不可更改”)
}
重写更新(db:SQLiteDatabase?,旧版本:Int,新版本:Int){
}
}
MainActivity.kt
class MainActivity:AppCompatActivity(),View.OnClickListener{
lateinit var dbhandler:DataBaseHandler
lateinit变量列表:列表
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
BtnUpdateName.setOnClickListener(此)
BtnUpdateID.setOnClickListener(此)
ButtonDiskData.setOnClickListener(此)
buttonDeleteAll.setOnClickListener(此)
buttonInsertData.setOnClickListener(此)
刷新列表()
}
覆盖有趣的onClick(v:视图?){
何时(v?.id){
R.id.BtnUpdateName->updateName()
R.id.BtnUpdateID->updateID()
R.id.ButtonDiskData->refreshList()
R.id.buttonDeleteAll->deleteAll()
R.id.buttonInsertData->dbhandler.insertData()
}
}
fun updateName(){
val id=Integer.parseInt(EditTextEmpID.getText().toString())
val newEmpName=EditTextNewEmpName.getText().toString()
dbhandler.modifyName(id,newEmpName)
刷新列表()
}
fun updateID(){
val name=EditTextEmpName.getText().toString()
val newEmpID=Integer.parseInt(EditTextNewEmpID.getText().toString())
modifyID(名称,newEmpID)
刷新列表()
}
全数{
val dbHandlerDel=数据库处理程序(此)
dbHandlerDel.deleteAllData()
刷新列表()
}
乐趣清单(){
text显示结果。text=getResult()
}
fun getResult():字符串{
val dbHandlerResult=数据库处理程序(this@MainActivity)
list=dbHandlerResult.displayData()
val str=StringBuffer(“”)
if(list!=null&&list.size>0){
for(列表中的元素){
str.append(element.id.toString()+“,“+element.name+”\n”)
}
return str.toString()
}否则
返回“无项目”
}
}

updateName()工作正常,但updateID()抛出错误

2020-05-31 18:51:33.656 6423-6423/com.db.dbdemo2 E/AndroidRuntime: 致命异常:主 进程:com.db.dbdemo2,PID:6423 android.database.sqlite.SQLiteException:没有这样的列:Mary(代码1):,编译时:UPDATE table_DEMO2 SET empId=?哪里 empName=Mary 位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native (方法) 位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 位于android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1577) 在

android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1525) 位于com.db.dbdemo2.DataBaseHandler.modifyID(DataBaseHandler.kt:52) 位于com.db.dbdemo2.MainActivity.updateID(MainActivity.kt:75) 在com.db.dbdemo2.MainActivity.onClick上(MainActivity.kt:58) 在android.view.view.performClick上(view.java:5637) 在android.view.view$PerformClick.run(view.java:22429) 位于android.os.Handler.handleCallback(Handler.java:751) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:154) 位于android.app.ActivityThread.main(ActivityThread.java:6119) 位于java.lang.reflect.Method.invoke(本机方法)
val DB_NAME = "DBDEMO2"
val DB_VERSION = 1

val TABLE_NAME = "table_DEMO2"
val COL_EMP_ID = "empId"
val COL_EMP_NAME = "empName"

data class User(var id: Int, var name: String)

val list = mutableListOf<String>(
    "John", "Robert", "William", "Charles", "Mary", "Elizabeth", "Maria", "Anne", "Margaret",
    "David","James","Richard","Johann","George","Paul","Susan", "Ruth", "Anna","Alice","Dorothy")

val CREATE_TABLE = "CREATE TABLE "+ TABLE_NAME+"("+ COL_EMP_ID+" INTEGER, "+COL_EMP_NAME+" TEXT NOT NULL" + ")"

class DataBaseHandler(context: Context) : SQLiteOpenHelper(context, DB_NAME,null, DB_VERSION){

    var  db: SQLiteDatabase = writableDatabase
    fun insertData(){
        val cv = ContentValues()
        var id = 1001
        var index = 0
        for (id in 1001..1020){
            cv.put(COL_EMP_ID,id)
            cv.put(COL_EMP_NAME, list[index])
            db.insert(TABLE_NAME,null,cv)
            index++
        }

    }

    fun modifyName(empID : Int, newName : String){
        val cv = ContentValues()
        cv.put(COL_EMP_NAME,newName)
        db.update(TABLE_NAME,cv, COL_EMP_ID+" = "+empID,null)
    }

    fun modifyID(name : String, newEmpID : Int){
        val cv = ContentValues()
        cv.put(COL_EMP_ID,newEmpID)
        db.update(TABLE_NAME,cv, COL_EMP_NAME+" = "+name,null)
    }

    fun deleteAllData(){
        db.delete(TABLE_NAME,null,null)
    }

    fun displayData() : List<User>{

        val list = mutableListOf<User>()
        val cursor = db.query(TABLE_NAME, arrayOf(COL_EMP_ID, COL_EMP_NAME),null,null,null,null,null,null)
        if (cursor!=null && cursor.count >0 ) {
            while (cursor.moveToNext()) {
                val data = User(cursor.getInt(0), cursor.getString(1))
                list.add(data)
            }
        }
        cursor.close()
        return list
    }


    override fun onCreate(db: SQLiteDatabase?) {
        db?.execSQL(CREATE_TABLE)
        Log.i("TAG", "OnCreateTable")
    }

    override fun onOpen(db: SQLiteDatabase?) {
        super.onOpen(db)
        Log.i("TAG", "OnOpenTable")
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {

    }
}
class MainActivity : AppCompatActivity(), View.OnClickListener {

lateinit var dbhandler: DataBaseHandler
lateinit var list: List<User>


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    BtnUpdateName.setOnClickListener(this)
    BtnUpdateID.setOnClickListener(this)
    buttonDispData.setOnClickListener(this)
    buttonDeleteAll.setOnClickListener(this)
    buttonInsertData.setOnClickListener(this)

    refreshList()
}


override fun onClick(v: View?) {
    when (v?.id) {
        R.id.BtnUpdateName -> updateName()
        R.id.BtnUpdateID -> updateID()
        R.id.buttonDispData -> refreshList()
        R.id.buttonDeleteAll -> deleteAll()
        R.id.buttonInsertData -> dbhandler.insertData()
    }
}

fun updateName() {
    val id = Integer.parseInt(EditTextEmpID.getText().toString())
    val newEmpName = EditTextNewEmpName.getText().toString()
    dbhandler.modifyName(id, newEmpName)
    refreshList()
}

fun updateID() {
    val name = EditTextEmpName.getText().toString()
    val newEmpID = Integer.parseInt(EditTextNewEmpID.getText().toString())
    dbhandler.modifyID(name, newEmpID)
    refreshList()
}

  fun deleteAll() {

      val dbHandlerDel = DataBaseHandler(this)
      dbHandlerDel.deleteAllData()
      refreshList()
  }

fun refreshList() {
    textDisplayResult.text = getResult()
}

fun getResult(): String {
    val dbHandlerResult = DataBaseHandler(this@MainActivity)
    list = dbHandlerResult.displayData()
    val str = StringBuffer("")
    if (list != null && list.size > 0) {
        for (element in list) {
            str.append(element.id.toString() + ", " + element.name + "\n")
        }
        return str.toString()
    } else
        return "No Items"
}
fun modifyID(name : String, newEmpID : Int){
        val cv = ContentValues()
        cv.put(COL_EMP_ID,newEmpID)
        val args = arrayOf<String>(name)
        db.update(TABLE_NAME, values, COL_EMP_NAME + "=?", args)
    }