Ionic: SQL Lite вставка в оператор не работает - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь создать простое приложение для Android с Ionic . Я хочу использовать базу данных SQL Lite с помощью некоторых статей о SQL Lite и Ionic и Ionic и Cordova из браузера . Мне удалось настроить свою базу данных (по крайней мере, мое приложение, кажется, работает) с помощью следующего кода, используемого в app.components.ts после this.initializeApp():

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 из неопределенного

Что я делаю не так? Мой код вставки работал в онлайн-редакторе , поэтому я не предполагаю, что это SQL.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

1 -> Установите плагины Cordova и Ionic Native:
Ионный Cordova Плагин добавить Cordova-sqlite-Storage
Установка npm --save @ ionic-native / sqlite

2 -> Добавьте этот плагин в модуль вашего приложения e
import {SQLite} из "@ ionic-native / sqlite";
провайдеры: [ SQLite, ]

3 -> на странице AddItem импортируйте это:
import {SQLite, SQLiteObject} из '@ ionic-native / sqlite';
конструктор( частный 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);
}

Затем соберите свой проект и запустите в реальном устройстве. Например: Android Phone.
SQlite требуют, чтобы Actual Device выполнялся правильно.

Это работает для меня как шарм. хоп это поможет вам ...:)

0 голосов
/ 09 сентября 2018

Вам нужно запустить свое приложение на реальном устройстве, чтобы ресурсы SQlite работали, или использовать режим IndexedDB, чтобы оно работало в браузерах. Но есть несколько советов, как запустить SQlite в браузере, например " Mocking SQLite native plugin ". И другие, такие как « Ionic Native SQLite Storage - Browser », а также « Ionic 3, Angular 4 и SQLite CRUD ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...