【发布时间】:2022-01-10 18:08:58
【问题描述】:
下面是我创建的一个函数,它应该更新数据库中的一行。
fun editQuestion(identifier: String, questionNumber: Int, questionText: String, answers: Array<String>, correctAns: Int) {
val db = this.writableDatabase
val contentValues = ContentValues()
contentValues.put(QUESTION_TEXT, questionText)
for (i in answers.indices) {
contentValues.put(ANSWER_ARRAY[i], answers[i])
}
contentValues.put(CORRECT_ANS, correctAns)
db.update(QUESTION_TABLE, contentValues, "$MASTER_ID = ? AND $QUESTION_NUM = $questionNumber", arrayOf(identifier))
}
函数调用后,数据库数据似乎没有变化,打印db.update()的输出时,返回0。
我有类似的功能可以成功更新数据库中的其他表,所以db.update() 确实有效。
我还有一些函数具有db.update() 调用,这些函数以上述函数中的表为目标,以便可以操作表。
我还仔细检查了这个函数的参数和值是否应该是它们应该是的。
我也知道WHERE 子句是正确的,因为我使用完全相同的子句删除同一张表中的一行。
最后,我还检查了我是否正确使用了val contentValues,它似乎是正确的。
所以我的问题真的是我错过了什么?我想不出还会发生什么。任何帮助将不胜感激,只需询问是否需要更多代码或上下文来回答。
【问题讨论】:
-
db.update()不返回false或true。它返回表中更新的行数。 -
@forpas 哦,我明白了,我认为 0 表示错误
-
如果你得到 0 那么这意味着没有行被更新,可能是因为在 WHERE 条件下没有行。
-
@forpas 是的,这帮助我解决了这个问题。谢谢
标签: android sqlite android-studio kotlin