离子:SQL Lite插入语句不起作用

时间:2018-09-09 13:21:18

标签: sqlite typescript cordova visual-studio-code ionic4

我正在尝试使用Ionic创建一个简单的Android应用。我想在SQL Lite and IonicIonic 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。

3 个答案:

答案 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>",[]);

这对我来说很有帮助。