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 sqlite 插件,否则它将无法工作。
可能是竞争条件。您的第一个查询可以在第二个查询之后执行,而您的第二个查询可以在第一个查询结束之前执行。您需要将事务的成功处理程序与查询一起使用,然后执行您的插入。我可能会切换到使用 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/
我在离子框架的 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 sqlite 插件,否则它将无法工作。
可能是竞争条件。您的第一个查询可以在第二个查询之后执行,而您的第二个查询可以在第一个查询结束之前执行。您需要将事务的成功处理程序与查询一起使用,然后执行您的插入。我可能会切换到使用 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/