Android应用程序,SQLite,FTS3,如果不存在则创建虚拟表

时间:2013-11-28 12:50:27

标签: android sql sqlite

初学者到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的存在,如果它不存在则只创建它?

1 个答案:

答案 0 :(得分:4)

根据CREATE VIRTUAL TABLE documentation,正确的语法是:

CREATE VIRTUAL TABLE IF NOT EXISTS User USING FTS4(...)

根据FTS documentation,您无法显式声明自动增量列,但每个表都有一个名为docidrowid的隐式列。