sqlite TEXT列名与值bug相同

时间:2012-03-21 17:28:16

标签: android sqlite

我发现sqlite似乎是一个奇怪的错误。

我有一张桌子

CREATE TABLE controller(id INTEGER PRIMARY KEY ASC, controller_number TEXT, password TEXT);

使用数据

INSERT INTO controller (controller_number, password) VALUES ("1234", 1234);

那里没有问题,但请检查一下。

sqlite> SELECT * FROM controller; 
1|1234|1234
sqlite> UPDATE controller SET controller_number="12345", password="password" WHERE id=1;
sqlite>  SELECT * FROM controller;
1|12345|1234

任何人都可以解释为什么会发生这种情况,或者这是一个应该提出的错误吗?

3 个答案:

答案 0 :(得分:2)

可能是双引号:

  

'keyword'单引号中的关键字是字符串文字。   “keyword”双引号中的关键字是标识符。

来自http://www.sqlite.org/lang_keywords.html

答案 1 :(得分:0)

>CREATE TABLE controller(id INTEGER PRIMARY KEY ASC, controller_number TEXT, password TEXT);
>INSERT INTO controller (controller_number, password) VALUES ("1234", 1234);
>SELECT * FROM controller; 
1|1234|1234
>UPDATE controller SET controller_number="12345", password="password" WHERE id=1;
>SELECT * FROM controller;
1|12345|1234

上面会出现问题,但如果这样做

>UPDATE controller SET controller_number='123456', password='password' WHERE id=1;

我明白了

>SELECT * FROM controller;
1|123456|password

很明显发生了什么,第一个UPDATE是设置密码=密码而不是密码=“密码”,第二个查询执行正确的方式。

任何人都可以详细说明为什么会发生这种情况,或者它应该首先发生?

答案 2 :(得分:0)

对于与 SELECT 或 UPDATE 语句中的任何字段名称相同的任何字段值,您必须对该字段值使用单引号(表示文字值,而不是双引号,表示字段名称)。我在我的应用中修复了这个问题。