Ionic 的 SQLite 数据库

SQLite Database for Ionic

我在离子框架的 SQLiteDatabase 中进行 CRUD 操作时遇到问题。 这是我的主 "index.html" 页面,我通过使用最近学到的 "replaceWith()" 替换另一个 div 来显示我的 div!

<meta charset="utf-8">
<meta name="viewport"
      content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>Still Learning</title>

<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="js/jquery-1.11.3.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
<script src="js/ng-cordova.min.js"></script>
<script src="cordova.js"></script>
<script>
$(document).ready(function(){
    $("#insertbtn").click(function(){
        $(".toshow").replaceWith('<div class="toshow" ng-controller="MyController">\
          <div class="list">\
          <label class="item item-input">\
            <input type="text" placeholder="Full Name" ng-model="fullname">\
          </label>\
          <label class="item item-input">\
            <input type="text" placeholder="Address" ng-model="address">\
          </label>\
          <label class="item item-input">\
            <input type="text" placeholder="Email" ng-model="email">\
          </label>\
          <label class="item item-input">\
            <input type="number" placeholder="Age" ng-model="age">\
          </label>\
          <label class="item item-input">\
            <input type="password" placeholder="Password" ng-model="password">\
          </label>\
          <label class="item item-input">\
            <textarea placeholder="Details" ng-model="details"></textarea>\
          </label>\
          <br /><button class="button button-outline button-positive" ng-click="insert(fullname, address, email, age, password, details)">INSERT</button>\
          </div><p>{{ statusMessage }}</p>\
        </div>');
    });

});
</script>

现在在这里,在这个替换 div 中,我添加了一些值并想将其插入到 SQLite 数据库中!

这是我的 app.js 文件:

    var db=null;
    angular.module('starter', ['ionic', 'ngCordova'])
    .run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {
         if (window.cordova && window.cordova.plugins.Keyboard) {
          cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
          cordova.plugins.Keyboard.disableScroll(true);
        }
        if (window.StatusBar) {
          StatusBar.styleDefault();
        }

        db = $cordovaSQLite.openDB("sample.db");
        $cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS User(id INTEGER PRIMARY KEY AUTOINCREMENT, fullname TEXT, address TEXT,email TEXT, age INTEGER, password TEXT, details TEXT)');
            });
    })

    .controller('MyController', function($scope, $cordovaSQLite) {
    $scope.insert = function(fullname, address, email, age, password, details) {
    $cordovaSQLite.execute(db, 'INSERT INTO User (fullname, address, email, age, password, details) VALUES (?,?,?,?,?,?)', [fullname, address, email, age, password, details])
        .then(function(result) {
            $scope.statusMessage = "Data saved successful, cheers!";
        }, function(error) {
            $scope.statusMessage = "Error on saving: " + error.message;
        })
}
    })        

没有任何错误,但是我的数据没有被插入!!有人可以告诉我我的错误是什么吗?提前致谢......

您必须从 https://github.com/litehelpers/Cordova-sqlite-storage 安装 Cordova s​​qlite 插件,否则它将无法工作。

可能是竞争条件。您的第一个查询可以在第二个查询之后执行,而您的第二个查询可以在第一个查询结束之前执行。您需要将事务的成功处理程序与查询一起使用,然后执行您的插入。我可能会切换到使用 Service 来实现你的持久性——这样你就可以从控制器中隐藏其中的一些细节。

.run(function($ionicPlatform , **$cordovaSQLite**) 
{
    //all the code remain same here
}

这里需要在.run()函数中多加一个参数,即$cordovaSQLite

这对你有帮助:)

最新版本的 cordovaSQLite 插件请求位置 属性 作为强制性 属性。所以你需要放; db=$cordovaSQLite.openDB({名称: "sample.db",位置: 1});而不是 db = $cordovaSQLite.openDB("sample.db");在你的 app.js 文件中。 有关更多详细信息,请关注此。 https://sumithmadhushan.wordpress.com/2016/04/12/use-sqlite-in-ionic-framework/