Я пытаюсь создать простое приложение для Android с Ионный. Я хочу использовать базу данных 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.info('Executed'))
// .catch(e=> console.info(e));
});
// .catch(e => console.info(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 из undefined
Что я делаю не так? Мой код вставки работал в онлайн-редакторе, поэтому я не предполагаю, что это SQL.
Когда я запускаю приложение с ionic cordova run browser, я получаю белый экран. Когда я запускаю его с ionic serve и перехватываю все исключения (иначе даже db init не будет работать), я получаю ошибку Невозможно прочитать свойство executeSql из undefined. Я редактирую QS, чтобы включить это.





Вам необходимо запустить приложение на реальном устройстве, чтобы ресурсы SQlite заработали, или использовать режим IndexedDB, чтобы оно работало в браузерах. Но есть несколько советов, как запустить SQlite в браузере, например "Собственный плагин Mocking SQLite". И другие, такие как «Ионное собственное хранилище SQLite - браузер», а также «Ionic 3, Angular 4 и SQLite CRUD».
1 -> Установите плагины Cordova и Ionic Native:ionic cordova plugin add cordova-sqlite-storagenpm install --save @ionic-native/sqlite
2 -> Добавьте этот плагин в модуль вашего приложенияeimport {SQLite} from "@ionic-native/sqlite";
поставщики: [
SQLite,
]
3 -> на странице AddItem импортируйте это:
import {SQLite, SQLiteObject} from '@ionic-native/sqlite'; <br>
constructor(private 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.info('Error in SaveData------');
console.info(JSON.stringify(err));
this.presentToast("Error in SaveData");
});
}).catch((e) => {
console.info("ERROR in SaveData:------");
console.info(JSON.stringify(e));
this.presentToast("ERROR in SaveData");
});
this.navCtrl.push(HomePage);
}
Затем создайте свой проект и запустите его на реальном устройстве. Пример: телефон Android.
Для правильной работы SQlite требуется фактическое устройство.
Это работает для меня как шарм. Надеюсь, что это поможет вам... :)
Если кто-то еще окажется здесь, у меня была эта проблема, но это было потому, что я использовал ключевые слова транзакции в своем запросе, а не встроенные функциональные возможности транзакций подключаемого модуля SQLite.
т.е. я делал:
db.executeSql("BEGIN TRANSACTION; <MY DB SETUP>; COMMIT;",[])
//Rather than
db.transaction((tx) => tx.executeSql("<MY DB SETUB>",[]);
У меня все получилось.
Что именно не работает? Какую ошибку вам возвращает БД?