更新 sqlite 数据库时未发现此类列错误

No such column found error while updating sqlite database

我正在使用以下代码更新我的 SQLite 数据库。

fun updateTable(user: Users):Int{
        val db=this.writableDatabase
        val values=ContentValues().apply {
            put(USER_ID,user.userId)
            put(USER_NAME,user.name)
            put(USER_NUMBER,user.number)
            put(USER_STATUS,user.status)
            put(USER_IMAGE,user.image)
            put(ANY_MESSAGE_MADE,user.anyMessageMade)
        }
        val newRowId = db?.update(TABLE_NAME,values, USER_ID+ "="+user.userId,null)!!
        db.close()
        return newRowId
    }

但是我的日志和程序中出现了这个错误

E/SQLiteLog: (1) no such column: vV91XjGEgzIpV3235aYS
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.russvkm.chathut, PID: 4421
    android.database.sqlite.SQLiteException: no such column: vV91XjGEgzIpV3235aYS (code 1): , while compiling: UPDATE contact_entry SET name=?,user_status=?,anyMessageMade=?,userId=?,user_image=?,user_number=? WHERE userId=vV91XjGEgzIpV3235aYS
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1651)
        at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1599)
        at com.russvkm.chathut.utils.CreateContact.updateTable(CreateContact.kt:78)
        at com.russvkm.chathut.fragment.ChatFragment.onClick(ChatFragment.kt:89)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

用户 ID 和 table 条目可用,我正在尝试更新。

我正在尝试使用主键 userId

更新 table

当您将变量 user.userId 传递给 update() 方法的 WHERE 子句时,变量 user.userId 的值应该在单引号内。
所以代码应该是:

db?.update(TABLE_NAME,values, USER_ID + " = '" + user.userId + "'", null)!!

但正确且安全的方法是在 WHERE 子句中使用 ? 占位符,并在 update() 的第 4 个参数中传递参数值:

db?.update(TABLE_NAME, values, USER_ID + " = ?", arrayOf(user.userId))!!

但是在你的代码中还有这一行:

put(USER_ID,user.userId)

为什么要使用已有的相同值更新列 userId

还有方法 update() returns 更新的行数而不是任何新的 rowid.
那么这一行的重点是什么:

val newRowId = db?.update(TABLE_NAME,values, USER_ID+ "="+user.userId,null)!! 

这让我觉得也许您想在 table 中插入一个新行而不更新现有行。
如果是这种情况,那么您应该使用方法 insert():

val newRowId = db?.insert(TABLE_NAME, null, values)!!