【问题标题】:Phonegap web sql database creation error: no such table: cacheGroupsPhonegap web sql数据库创建错误:没有这样的表:cacheGroups
【发布时间】:2015-01-02 14:48:21
【问题描述】:

我正在使用 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在幕后为自己施展魔法而创建的一些表。我想在数据库创建过程中出了点问题,因为我在以后的启动中没有同样的错误。我错过了什么吗?

【问题讨论】:

    标签: sqlite cordova web-sql


    【解决方案1】:

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

    从您的问题来看,您似乎正在使用 third 方库,该库在 startup 的 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.
    } 
    

    【讨论】:

    • 我没有为数据库使用任何第三方库,webkit 浏览器内置了对 web sql 的支持(并且 phonegap 应用程序在基于 webkit 的系统浏览器中运行)。每当我创建新数据库时,这些表都是由浏览器创建的。
    • 至少对于我开发的应用程序,我还没有看到这样的错误。该错误是否会导致您的 APP 出现任何问题。如果不是,我建议您忽略它,因为它可能与科尔多瓦的内部工作有关。您正在开发哪个版本的cordova?
    • 我正在使用 Phonegap 4.1.2-0.22.10。是的,在应用程序第一次启动时,它无法从数据库中获取一些数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多