我在SQLite Chrome(html5)中创建了一个表:
transaction.executeSql(
'CREATE TABLE IF NOT EXISTS record('+
'id INTEGER NOT NULL PRIMARY KEY,'+
'fkindicatorspeciesid INTEGER NOT NULL REFERENCES indicatorspecies(indicatorspeciesid),'+
'latitude INTEGER NOT NULL,'+
'longitude INTEGER NOT NULL,'+
'time TEXT NOT NULL,'+
'`when` TEXT NOT NULL,'+
'numberseen INTEGER NOT NULL,'+
'notes TEXT NOT NULL,'+
'online_recordid INTEGER,'+
'status TEXT,'+
'locationid INTEGER REFERENCES location(locationid),'+
'surveyid INTEGER REFERENCES survey(id));',
[], nullHandler,errorHandler);
然后我添加一些数据:
现在我尝试检索'online_recordid'大于零的所有记录:
select * from record where online_recordid > 0;
我不应该记录我的记录,因为“online_recordid”列中没有任何内容。问题是我确实得到了记录!
答案 0 :(得分:1)
SQLite uses a more general dynamic type system.
您可以有效地将''(空字符串)存储到online_recordid中,即使它也被定义为“INTEGER”。这仅影响Type Affinity
,并且不会像传统的RDBMS那样以任何方式限制数据。
最有可能发生的事情是,当您真正想存储的内容为NULL时,您的代码会插入online_recordid
。
当查询online_recordid > 0
触发时,空白会转换为[某事],使其成为>0
。
答案 1 :(得分:0)
只需检查online_recordid是否为空:
select * from record where online_recordid > 0 and online_recordid is not null
然而,这种行为很奇怪。我试着和你做同样的查询,但我没有记录回来。也许我做了与你不同的事情。
答案 2 :(得分:0)
这就是我最终解决它的方式。
select * from record where online_recordid <> '' and online_recordid > 0;