带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好

Posted

技术标签:

【中文标题】带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好【英文标题】:Cordova app with SQLite database freezes after first run in iOS but works fine in Android 【发布时间】:2016-03-25 16:17:30 【问题描述】:

我在使用 AngularJS 构建的 Cordova 应用程序中使用 SQlite。我引导应用程序 onDeviceReady() 然后检查是否存在数据库和特定表并根据结果执行某些操作。该应用程序在 android 中按预期运行,但在 ios 中它第一次运行,然后在模拟器或设备的白页上被阻止!谁能告诉我如何解决这个问题?

var db = window.sqlitePlugin.openDatabase(
                     // options
                     
                         name: "users_info.db",
                         location: 2 
                     ,
                         // success callback
                         function (msg) 
                           //  console.log("success: " + msg);
                            // console.log(msg);
                         ,
                         // error callback
                         function (msg) 
                           //  console.log("error: " + msg);
                         
                     );
db.transaction(function (tx) 
    tx.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name='user'", [], function (tx, result) 

        if (result.rows.length == 0) 
            console.log('theres no table with this name ');
            $scope.$apply(function () 
                $location.path('/login');
            );
             else 
            tx.executeSql(
          "select * from user;",
          [],
          function (tx, res) 
              var row = res.rows.item(0);
              console.log(row.role);
              if (row.role == 4) 
                  $scope.$apply(function () 
                      userService.roleid = '4';
                      userService.userid = row.userid;
                      $location.path('/student');
                  );
              
          );
           console.log('this table exists');
        
    );
);

我也尝试了以下代码来打开数据库,但在 iOS 中,应用程序在第一次运行后再次冻结

var db = $cordovaSQLite.openDB( name: "users_info.db", location: 1, iosDatabaseLocation: 'default' ,
    // success callback
                         function (msg) 
                             //  console.log("success: " + msg);
                             console.log(msg);
                             console.log('success');
                         ,
                         // error callback
                         function (msg) 
                              console.log("error: " + msg);
                              console.log('error');
                         
);

【问题讨论】:

【参考方案1】:

我发现问题的原因是我的页面包含 SQLite 数据库的代码 sn-p 在加载时刷新了两次,导致代码同时读取和写入 SQlite 数据库两次,这导致数据库和因此iOS应用程序冻结。我确保代码只运行一次,它就像一个魅力!

【讨论】:

以上是关于带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 10 中使用 cordova-plugin-file 复制 SQLite 数据库 cordova-sqlite-storage

Ionic/Cordova SqLite 并不总是在来自 Play 商店的应用更新之间持续存在

Cordova Android:从任意目录打开 SQLite .db 数据库

升级到 64 位时 Cordova Sqlite 数据库错误

Cordova App sqlite 数据库查看器,用于运行时应用程序测试,如 Web SQL

使用 IONIC 3 + CORDOVA 在 SQLite 中创建数据库