Android / PhoneGap / SQLite app:这个'Create Virtual Table'命令在模拟器上运行,在设备上失败

时间:2013-12-18 16:58:16

标签: android sqlite cordova

我有一个应用程序,使用Lite4Cordova插件。在第一次运行应用程序时,它会从一些文档中填充虚拟SQLite FS4表。它在模拟设备上正确运行,但在具有SQL错误的真实设备上失败。

要打开数据库,我这样做:

        var db;
        var shortName = 'linienDB';
        var version = '1.0';
        var displayName = 'linienDB';
        var maxSize = 65535;

        db = window.sqlitePlugin.openDatabase({name: shortName, version: version, displayName: displayName, maxSize: maxSize});
        alert("OpenDB is " + db)

警报让我在模拟器和真实设备上“OpenDB是[object Object]”。

创建表代码是这样的:

      db.transaction(function(tx){
           tx.executeSql( 'CREATE VIRTUAL TABLE IF NOT EXISTS guidelines USING FTS4 (category, id, chapter, header, content)',[],defaultNullHandler,defaultErrorHandler);
      },defaultErrorHandler);

在模拟设备上,运行正常。数据库被创建&填充正确,&我可以对它运行查询。但是在我的真实设备上,defaultErrorHandlerdb.transaction触发,我得到警告“错误处理SQL:未定义”。控制台上的错误是:

12-18 17:39:08.948: V/executeSqlBatch(4375): SQLitePlugin.executeSql[Batch](): Error=near "NOT": syntax error: , while compiling: CREATE VIRTUAL TABLE IF NOT EXISTS guidelines USING FTS4 (category, id, chapter, header, content)

如果我切换回标准的WebSQL DB打开,如下所示:

db = openDatabase(shortName, version, displayName, maxSize);

然后OpenDB警报为OpenDB is [object Database],加载序列完成 - 但当然没有构建表,因为创建FS4虚拟表是SQLite命令,而不是WebDB命令。


更新:

在LogCat发生错误后,“Not”附近出现错误,我从Create Table语句中删除了“IF NOT EXISTS”,并且只有:

db.transaction(function(tx){
                    tx.executeSql( 'CREATE VIRTUAL TABLE guidelines USING FTS4 (category, id, chapter, header, content)',[],defaultNullHandler,defaultErrorHandler);
                },defaultErrorHandler);

现在可以在设备上完美运行。令人讨厌的是不能使用IF NOT EXISTS语法,但是对于有用的错误仍然赞成Android SDK。

0 个答案:

没有答案