我正在尝试使用Ionic创建一个简单的Android应用。我想在SQL Lite and Ionic和Ionic and Cordova from browser上的一些文章的帮助下使用SQL Lite数据库。我设法在this.initializeApp()
之后在 app.components.ts 中使用以下代码来设置数据库(至少我的App似乎在运行):
init_db(){
var config = this.sqlite.create({
name: 'data.db',
location: 'default'
})
.then((db: SQLiteObject) =>{
this.db = db;
db.executeSql('CREATE TABLE "ExpenseModel" ( `EXPENSE_LIMIT` INTEGER NOT NULL, `ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `MODEL_NAME` TEXT NOT NULL UNIQUE, `PINNED` INTEGER )');
// .then(() => console.log('Executed'))
// .catch(e=> console.log(e));
});
// .catch(e => console.log(e));
(注释掉异常处理仅是为了查看是否抛出异常)
但是,以下代码无法进行简单的SQL Lite插入:
this.db.executeSql('INSERT INTO "ExpenseModel" (EXPENSE_LIMIT, ID, MODEL_NAME, PINNED) VALUES ( 5,1, \'asd\', 1)');
使用ionic cordova run browser
运行该应用程序时,出现白屏。当我用ionic serve
运行它并捕获所有异常(否则,即使db init也不起作用),我得到错误无法读取未定义的属性'executeSql'
我做错了什么?我的插入代码有效in an online editor,所以我不认为它是SQL。
答案 0 :(得分:2)
1->安装Cordova和Ionic Native插件:
离子cordova插件添加cordova-sqlite-storage
npm install --save @ ionic-native / sqlite
2->将此插件添加到您应用的模块中 e
从“ @ ionic-native / sqlite”导入{SQLite};
提供者:[
SQLite,
]
3->在AddItem页面中导入:
从'@ ionic-native / sqlite'导入{SQLite,SQLiteObject};
构造函数
私人sqlite:SQLite,
);
addItem() {
this.sqlite.create({
name: 'ionicdb.db',
location: 'default'
}).then((db: SQLiteObject) => {
db.executeSql('INSERT INTO bikes VALUES(NULL,?,?,?,?,?)', [this.date, this.item.modal, this.item.company, this.item.color, this.imageString])
.then((res) => {
this.presentToast("Data Saved Successfully");
})
.catch((err) => {
console.log('Error in SaveData------');
console.log(JSON.stringify(err));
this.presentToast("Error in SaveData");
});
}).catch((e) => {
console.log("ERROR in SaveData:------");
console.log(JSON.stringify(e));
this.presentToast("ERROR in SaveData");
});
this.navCtrl.push(HomePage);
}
然后构建您的项目并在实际的Device中运行。例如:Android手机。
SQlite要求“实际设备”执行正确。.
这就像魅力一样对我有效。 希望这对您有帮助...:)
答案 1 :(得分:1)
您需要在真实的设备上运行应用程序以使SQlite资源正常工作,或使用IndexedDB模式使其在浏览器上正常工作。 但是,有一些技巧可以使SQlite在浏览器上运行,例如“ Mocking SQLite native plugin”。还有其他类似“ Ionic Native SQLite Storage — Browser”和“ Ionic 3, Angular 4 and SQLite CRUD”等。
答案 2 :(得分:0)
如果其他人发现自己在这里,我遇到了这个问题,但这是因为我在查询中使用了事务关键字,而不是 SQLite 插件的内置事务功能。
即我在做:
db.executeSql("BEGIN TRANSACTION; <MY DB SETUP>; COMMIT;",[])
//Rather than
db.transaction((tx) => tx.executeSql("<MY DB SETUB>",[]);
这对我来说很有帮助。