我是离子2开发的新手(也未使用过离子-1)。
我试图在应用程序中使用cordova sqlite插件。我关注Use SQLite in Ionic 2链接。能够使用以下命令将插件添加到项目中。
$ ionic plugin add cordova-sqlite-storage
在真实设备上部署应用程序后,数据已创建并打开,并且people
表已成功创建。
以下是来自Xcode的日志:
2016-10-17 16:29:16.435992 SqlProject [238:3982] - [SQLitePlugin pluginInitialize] [第67行]路径上没有云同步:/ var / mobile / Containers / Data / Application / DFDADD59-D48E-4D4C -B8F0-23EEDE169471 /库/ LocalDatabase 2016-10-17 16:29:16.436138 SqlProject [238:4034] - [SQLitePlugin openNow:] [第137行]打开完整数据库路径:/ var / mobile / Containers / Data / Application / DFDADD59-D48E-4D4C-B8F0- 23EEDE169471 /库/ LocalDatabase / data.db 2016-10-17 16:29:16.443765 SqlProject [238:4034] - [SQLitePlugin openNow:] [第163行]好消息:SQLite是线程安全的! 2016-10-17 16:29:16.448487 SqlProject [238:3982] OPEN数据库:data.db - 确定 2016-10-17 16:29:16.463667 SqlProject [238:3982] 创建表: [object Object]
打开数据库代码:
从离子本地&#39 ;;
导入{SQLite}
constructor(platform: Platform) {
platform.ready().then(() => {
StatusBar.styleDefault();
let database = new SQLite();
database.openDatabase({
name: "data.db",
location: "default"
}).then(() => {
database.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)", {}).then((data) => {
console.log("TABLE CREATED: ", data);
}, (error) => {
console.error("Unable to create table", error);
})
}, (error) => {
console.error("Unable to open database", error);
});
});
}
但是,现在我在插入和获取来自数据库的记录时收到错误。
public add() {
console.log("Inside the add function- ");
this.database.executeSql("INSERT INTO people (firstname, lastname) VALUES (?, ?)", ['mahesh', 'bhalerao']).then((data) => {
console.log("INSERTED: " + JSON.stringify(data));
}, (error) => {
console.log("ERROR: " + JSON);
});
}
public fetchRecords() {
this.database.executeSql("SELECT * FROM people", []).then((data) => {
alert("executeSql refresh function success");
this.people = [];
if(data.rows.length > 0) {
for(var i = 0; i < data.rows.length; i++) {
this.people.push({firstname: data.rows.item(i).firstname, lastname: data.rows.item(i).lastname});
}
}
}, (error) => {
console.log("ERROR: " + JSON.stringify(error.err));
});
}
我收到了未定义的错误。
错误:未定义
不确定出了什么问题。
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:0)
第一行摘录,第五行:你有let database = new SQLite();
;您在磁盘上创建数据库(如果它还不存在),然后退出构造函数。
由于let
的作用域,一旦退出结构函数,database
变量就不存在,它永远不会存在add
和fetch
方法存在。
而不是let
你应该将database
放入属性(这是方法正在寻找的位置),然后一切都应该正常工作。
换句话说,你应该有类似的代码:
public database: SQLite //here the attribute
constructor(platform: Platform) {
platform.ready().then(() => {
StatusBar.styleDefault();
this.database = new SQLite(); //here you initialize the attribute instead of a volative variable
this.database.openDatabase({ //in this block you open an then populate the attribute
name: "data.db",
location: "default"
}).then(() => {
database.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)").then((data) => {
console.log("TABLE CREATED: ",
}, (error) => {
console.error("Unable to create table", error);
});
}, (error) => {
console.error("Unable to open database", error);
});
});
}