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))
我将正确的数据传递给 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))