初学者到SQLite / SQL。构建启用了FTS3的Android应用程序,因此我需要创建虚拟表。我不能使用它,因为(根据我的系统日志)虚拟表不使用IF NOT EXISTS语法:
// Create the table if it doesn't exist.
db.transaction(function(tx){
tx.executeSql( 'CREATE TABLE IF NOT EXISTS User(UserId INTEGER NOT NULL PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL)',[],nullHandler,errorHandler);
},errorHandler,successCallBack);
为了确认我的SQLite插件按预期工作,我一直在使用它:
// Create the table if it doesn't exist.
db.transaction(function(tx){
tx.executeSql( 'DROP TABLE User',[],nullHandler,errorHandler);
tx.executeSql( 'CREATE VIRTUAL TABLE User USING fts3 (UserId INTEGER NOT NULL PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL)',[],nullHandler,errorHandler);
},errorHandler,successCallBack);
主要按预期工作(除了UserId INTEGER NOT NULL PRIMARY KEY
不再有效,每次都返回null - 建议以虚拟表友好的方式添加递增整数也非常受欢迎)。但我不想每次都放弃桌子,我想保留它。如何检查表User的存在,如果它不存在则只创建它?
答案 0 :(得分:4)
根据CREATE VIRTUAL TABLE documentation,正确的语法是:
CREATE VIRTUAL TABLE IF NOT EXISTS User USING FTS4(...)
根据FTS documentation,您无法显式声明自动增量列,但每个表都有一个名为docid
或rowid
的隐式列。