我在SQLITE中有一个表:
CREATE TABLE "INVENTORY" (
"product" VARCHAR NOT NULL,
"version" VARCHAR NOT NULL,
"productionDate" VARCHAR NOT NULL,
"order" VARCHAR NOT NULL,
"AA" VARCHAR NOT NULL,
"quantity" INTEGER,
"location" INTEGER,
"barcode" VARCHAR,
PRIMARY KEY ("product", "version", "productionDate", "AA", "order")
);
当我尝试选择一条记录(它的存在)时:
SELECT * FROM INVENTORY
WHERE (product='25120171' AND version='02' AND productionDate='091014' AND AA='001' AND order='4420')
我收到错误
SQLiteManager:可能的SQL语法错误:SELECT * FROM INVENTORY WHERE (产品=' 25120171' AND version =' 02' AND productionDate =' 091014' AND AA =' 001' AND order =' 4420')[near" order&#34 ;: syntax error] Exception 名称:NS_ERROR_FAILURE异常消息:组件返回失败 代码:0x80004005(NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]
如果我从选择查询中删除AND order='4420'
:
SELECT * FROM INVENTORY
WHERE (product='25120171' AND version='02' AND productionDate='091014' AND AA='001');
它有效。我无法找到错误的位置......
答案 0 :(得分:1)
使用order作为列名可能是导致错误的原因。
SQL标准指定了大量关键字,这些关键字不能用作表,索引,列,数据库,用户定义函数,排序规则,虚拟表模块或任何其他命名对象的名称。关键字列表很长,以至于很少有人能记住它们。对于大多数SQL代码,最安全的做法是永远不要使用任何英语单词作为用户定义对象的名称。
order
就是其中之一。
您可以重新编写查询以转义列名:
SELECT * FROM INVENTORY
WHERE (product='25120171' AND version='02' AND productionDate='091014' AND AA='001' AND `order`='4420')