我正在尝试将一些数据存储在我的离子应用程序的sqlite数据库中。我正在使用以下代码创建数据库和一个表:
var db = null;
angular.module('starter', ['ionic', 'starter.controllers', 'ngCordova', 'slick'])
.run(function($ionicPlatform, $cordovaSQLite) {
$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();
}
if (window.cordova) {
db = $cordovaSQLite.openDB({ name: "kog.db" });
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)");
console.log("android");
} else {
db = window.openDatabase("kog.db", '1', 'kog', 1024 * 1024 * 100); // browser
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)');
});
console.log("browser");
}
});
})
当我测试我的应用时,不会创建数据库。我的移动设备上没有使用SQLite插件,也没有使用window.openDatabase在Chrome中测试应用程序。
任何建议,我做错了什么?
感谢您的帮助! 卡拉
答案 0 :(得分:0)
控制器中的$ cordovaSQLite代码应该位于离子就绪函数或deviceready函数中(设备就绪函数首选,因为离子就绪函数有时不会触发)否则我已经看到它给出错误。
您使用openDB的方法是正确的,它位于run函数中。虽然理想情况下它也应该有一个try catch语句。
为了更清晰,请查看我的存储库的www / index.html和www / js / app.js文件。
回购时间为https://github.com/vibhutewary/ionic_ngcordova_sqlite_todo
您将在示例中的“platforms / android / build / outputs”文件夹中找到已构建的apk。我在下载代码后测试了“离子运行android”命令,它运行正常。
上述应用程序的版本2位于我的github帐户的“ionic_ngcordova_sqlite_todos_version_2”存储库中。 它具有相同的功能,但使用了Ionic Framework的实践(改进的CSS等)。
另外我建议使用alert()函数来检查openDB成功函数中的代码是否正在执行。这可以在try catch语句中。
好的更新:我在这里分享了一个关于openDB和INSERT,SELECT的简单例子的链接。它使用alert来通知是否创建了db,然后在插入值时发出警报。然后它使用SELECT语句警告插入的值。
请参阅www / index.html和www / js / app.js文件以获取代码。 git存储库位于https://github.com/vibhutewary/ionic_ngcordova_sqlite_creatdb_insert_select
我已下载“ionic_ngcordova_sqlite_creatdb_insert_select”存储库并运行“ionic run android”并且它可以正常工作。存储库已经在“/ platforms / android / build / outputs”文件夹中创建了一个apk(这将在“ionic run android”命令中覆盖)。这里的示例创建一个DB,然后在控制器中,在表中插入测试消息,然后使用alert()来显示表中的SELECT结果。
要检查是否已创建数据库,可以使用checkFile方法。
您可以看到上面的“ionic_ngcordova_sqlite_creatdb_insert_select”存储库的www / js / app.js文件,因为它调用了“cordova.file.applicationStorageDirectory”方法。
请注意,数据库位于此“applicationStorageDirectory”文件夹中名为“databases”的文件夹中。
您还可以参考这篇文章,其中显示了applicationStorageDirectory的用法:Sqlite: check if database exist
编辑:我已经看到Ionic Framework在启动时在某些手机上崩溃(在手机上测试“PHICOMM C630”),所以我删除了Ionic Framework并且只包含了ngCordova和AngularJS库。最终的解决方案是在我的名为“corodova_ngcordova_angularjs_jquerymobile_todos”的存储库中。它是一个使用SQLite DB处理的Todo应用程序。要在不构建的情况下运行解决方案,请键入“cordova run android”
答案 1 :(得分:0)
您的代码在创建设备数据库时有两个错误,一个在浏览器创建数据库时出错。下面是两者的解决方案
某些Android设备限制使用位置参数和数据库名称。所以提供Location参数 改变这一行
db = $cordovaSQLite.openDB({ name: "kog.db" });
到
db = $cordovaSQLite.openDB({ name: "kog.db", location : 1 });
并且对于浏览器支持,您需要更改这些行
db = window.openDatabase("kog.db", '1', 'kog', 1024 * 1024 * 100); // browser
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)');
});
到
$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)');