Phonegap web sql数据库创建错误:没有这样的表:cacheGroups

时间:2015-01-01 23:10:41

标签: sqlite cordova web-sql

我正在使用Phonegap开发移动应用程序。我的应用程序中有一个Web sql数据库。第一次启动应用程序时,将创建并填充数据库。在我用于数据库创建的代码下面:

    var db = window.openDatabase('littera', '1.0', 'Littera DB', 5 * 1024 * 1024);

        db.transaction(function(tx) {
          tx.executeSql('CREATE TABLE IF NOT EXISTS quote (id integer primary key, author_id integer, category text, content text, favourite integer)');
          tx.executeSql('CREATE TABLE IF NOT EXISTS author (id integer primary key, name text, short_bio text, media text)');
          callback();
        }, function(e) {
            console.log("ERROR CREATING DB: " + e.message);
            callback();
        });

我第一次启动应用程序时,会发生以下与数据库创建相关的错误(请注意,这只是第一次发生,应用程序在所有其他启动时都能正常运行):

01-01 23:57:41.600: E/SQLiteLog(1944): (1) no such table: CacheGroups
01-01 23:57:41.600: D/WebKit(1944): ERROR: 
01-01 23:57:41.600: D/WebKit(1944): Application Cache Storage: failed to execute statement "DELETE FROM CacheGroups" error "no such table: CacheGroups"
01-01 23:57:41.600: D/WebKit(1944): external/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558) : bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&)
01-01 23:57:41.600: E/SQLiteLog(1944): (1) no such table: Caches
01-01 23:57:41.600: D/WebKit(1944): ERROR: 
01-01 23:57:41.600: D/WebKit(1944): Application Cache Storage: failed to execute statement "DELETE FROM Caches" error "no such table: Caches"
01-01 23:57:41.600: D/WebKit(1944): external/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558) : bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&)
01-01 23:57:41.600: E/SQLiteLog(1944): (1) no such table: Origins
01-01 23:57:41.600: D/WebKit(1944): ERROR: 
01-01 23:57:41.600: D/WebKit(1944): Application Cache Storage: failed to execute statement "DELETE FROM Origins" error "no such table: Origins"
01-01 23:57:41.600: D/WebKit(1944): external/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558) : bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&)
01-01 23:57:41.600: E/SQLiteLog(1944): (1) no such table: DeletedCacheResources

生成错误的表不是我自己的表,而是由web sql在幕后创建的一些表做自己的魔法。我想在数据库创建过程中出了问题,因为我在以后的发布中没有出现同样的错误。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您尚未提供完整的详细信息。

根据您的问题,您似乎正在使用第三方库,该库在启动的sqlite中自动创建数据库。
可以从表名 CacheGroups,Caches和DeletedCacheResources 推断,APP使用这些表存储 CACHED 信息以提高性能。
由于这些是用于在APP运行后存储数据的表格,因此在APP的第一次运行期间,它们将可用。这就是我认为在APP的首次运行期间它给出错误的原因 开始使用APP后,它会创建缓存表,并在下次后续运行期间开始使用它们。

为了避免APP中的错误,您需要编写逻辑以防止缓存表逻辑在第一次运行时运行。
您需要创建/存储一些在第一次运行APP时将保留的变量,然后使用该变量来防止缓存的表逻辑运行。
例如伪代码。

Get the App_first_run variable.

if ( App_first_run == true )
{
   Do not run the cached table logic.
}