Android sqlite update 没有按预期更新,双引号字符串文字或没有这样的列错误发生

Android sqlite update not updating as expected, double-quoted string literal or no such column Errors occur

我将正确的数据传递给 db 修饰函数,在 ContentValues 中设置值,但似乎无法更新。我正在尝试按字符串类型的名称(PK)进行更新,我之前已经使用类型为 int 的 ID 完成了此操作。

这是一些代码:

companion object {
        private val version = 1
        private val name = "mydatabase.db"
        val TABLE_NAME = "countires"
        val COLUMN_NAME1 = "name"
        val COLUMN_NAME2 = "gold"
        val COLUMN_NAME3 = "silver"
        val COLUMN_NAME4= "bronze"
        val COLUMN_NAME5= "total"

    }
    fun updateCountry(country:Country){
        val db = this.writableDatabase
        val values = ContentValues()
        var trx = country.name
        values.put(COLUMN_NAME1, country.name)
        values.put(COLUMN_NAME2, country.gold)
        values.put(COLUMN_NAME3, country.silver)
        values.put(COLUMN_NAME4, country.bronze)
        values.put(COLUMN_NAME5, country.total)
        db.update(TABLE_NAME,values, "$COLUMN_NAME1=\"$trx\"", null)
        db.close()
    }

在 运行 秒,我收到以下消息: W/SQLiteLog: (28) 双引号字符串文字:“Austria” 如果我将查询语句更改为:

        db.update(TABLE_NAME,values, "$COLUMN_NAME1=$trx", null)

我收到以下错误: (1) 没有这样的列:奥地利在“UPDATE countires SET bronze=?,silver=?,gold=?,name=?,total=? WHERE name=Austria” D/AndroidRuntime android.database.sqlite.SQLiteException:没有这样的列:奥地利(代码 1 SQLITE_ERROR):,编译时:UPDATE countires SET bronze=?,silver=?,gold=?,name=?,total=? WHERE name=奥地利 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法) 在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:652) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)...

需要明确的是,数据库中有一列具有该名称。在数据库检查器中进行简单搜索:

select  *  from countires
where name = "Austria"

Returns 所需的行。

我的更新命令显然有问题,我不确定为什么它不起作用。感谢任何帮助。

您应该为要传递的参数使用 ? 占位符,并使用方法的第 4 个参数 update() 作为其在数组中的值:

db.update(TABLE_NAME, values, "$COLUMN_NAME1 = ?", arrayOf(trx))