我花了最后一小时试图找出我的SQLite数据库没有更新的原因。
正在进行的查询是
UPDATE Table SET col1 = val AND col2 = val2 AND col3 = val3 WHERE col1 = val4
显然这是更新查询的错误语法,但是没有抛出任何异常,没有显示错误,并且直接使用SQLiteBrowser运行它甚至表示查询正确执行并更新了一行(但没有更新)已经完成了)
有人可以解释为什么这个查询没有被异常或语法错误拒绝吗?
更新
因此,在进一步研究之后,我可以看到确实执行了更新,但是不是将col1
设置为新值,而是将其设置为0,这似乎很奇怪。
答案 0 :(得分:2)
大多数语言中的AND运算符(包括SQLite)可用于表达式(用于布尔运算或按位运算等),=
运算符正在测试相等性,因此您只需设置col1
等于表达式val AND col2 = val2 AND col3 = val3
的值。
例如,如果表达式中的所有列和值均为1,则您将col1设置为:
1 AND 1 = 1 AND 1 = 1
...这是一个有效的表达式,其值为1。
即使WHERE
中的新值与旧值相同,SQLite也会报告col1
子句与{{1}}子句匹配的行数, em>,即使数据实际上没有变化。它仍然发现要更新的行并在其中添加新值,因此它报告已成功执行更新。
我们需要知道列的类型/值,以确切了解其中发生了什么,但我没有看到语法错误,尽管它很清楚你并不意味着做表达(有效!)说的话!