Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ionic SQLITE

    25 avril 2018 à 9:29:11

    Bonjour,

    je développe actuellement une application avec ionic, et j'ai besoin d'avoir une base de données en local (sqlite).

    Cependant, je n'arrive vraiment pas à utiliser sqlite correctement, même en reprenant des exemple sur internet rien ne fonctionne.

    J'ai un scripte database.ts : 

    import { Injectable } from '@angular/core';
    import { Platform } from 'ionic-angular';
    import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
    import { SQLitePorter } from '@ionic-native/sqlite-porter';
    import { Http } from '@angular/http';
    import 'rxjs/add/operator/map';
    import { BehaviorSubject } from 'rxjs/Rx';
    import { Storage } from '@ionic/storage';
    
    @Injectable()
    export class DatabaseProvider {
        database: SQLiteObject;
        private databaseReady: BehaviorSubject<boolean>;
    
        constructor(public sqlitePorter: SQLitePorter, private storage: Storage, private sqlite: SQLite, private platform: Platform, private http: Http) {
            this.databaseReady = new BehaviorSubject(false);
            this.platform.ready().then(() => {
                this.sqlite.create({
                    name: 'developers.db',
                    location: 'default'
                })
                    .then((db: SQLiteObject) => {
                        this.database = db;
                        this.storage.get('database_filled').then(val => {
                            if (val) {
                                this.databaseReady.next(true);
                            } else {
                                this.fillDatabase();
                            }
                        });
                    });
            });
        }
    
        fillDatabase() {
            this.http.get('../../assets/dummyDump.sql')
                .map(res => res.text())
                .subscribe(sql => {
                    this.sqlitePorter.importSqlToDb(this.database, sql)
                        .then(data => {
                            this.databaseReady.next(true);
                            this.storage.set('database_filled', true);
                        })
                        .catch(e => alert("erreur filleDatabase "+e));
                });
        }
    
        addDeveloper(name, skill, years) {
            let data = [name, skill, years]
            return this.database.executeSql("INSERT INTO developer (name, skill, yearsOfExperience) VALUES (?, ?, ?)", data).then(data => {
                return data;
            }, err => {
                console.log('Error: ', err);
                alert("alert addDeveloper");
                return err;
            });
        }
    
        getAllDevelopers() {
            return this.database.executeSql("SELECT * FROM developer", []).then((data) => {
                let developers = [];
                if (data.rows.length > 0) {
                    for (var i = 0; i < data.rows.length; i++) {
                        developers.push({ name: data.rows.item(i).name, skill: data.rows.item(i).skill, yearsOfExperience: data.rows.item(i).yearsOfExperience });
                    }
                }
                return developers;
            }, err => {
                alert("erreur getAllDevelopers()");
                return [];
            });
        }
    
        getDatabaseState() {
            return this.databaseReady.asObservable();
        }
    
    }

    Un home.ts :

    import { Component } from '@angular/core';
    import { NavController, NavParams } from 'ionic-angular';
    
    import { PhotoPage } from '../photo/photo';
    import { DatabaseProvider } from '../../providers/database/database';
    
    
    
    @Component({
      selector: 'page-home',
      templateUrl: 'home.html'
    })
    export class HomePage {
    
      prenom : string;
      nom : string;
      developer = {};
      developers = [];
    
      constructor(public navCtrl: NavController, private navParam: NavParams, private databaseprovider: DatabaseProvider) {
    
        this.databaseprovider.getDatabaseState().subscribe(rdy => {
          if (rdy) {
            this.loadDeveloperData();
          }
        })
    
      }
    
      private showPhoto(){
        this.navCtrl.push(PhotoPage,{
          nom: this.nom,
          prenom: this.prenom
        });
      }
    
      loadDeveloperData() {
        this.databaseprovider.getAllDevelopers().then(data => {
          this.developers = data;
        })
      }
    
      addDeveloper() {
        this.databaseprovider.addDeveloper("harry","master", "10")
            .then(data => {
              this.loadDeveloperData();
            });
        this.developer = {};
      }
    
    }
    
    un home.html :
    <ion-header>
      <ion-navbar>
        <ion-title>Home</ion-title>
      </ion-navbar>
    </ion-header>
    
    <ion-content>
      <button ion-button full (click)="addDeveloper()">Add Developer Info</button>
    
      <ion-list>
        <ion-item *ngFor="let dev of developers">
          <h2>{{ dev.name }}</h2>
          <p>{{ dev.yearsOfExperience }} years of {{ dev.skill }} Experience!</p>
        </ion-item>
      </ion-list>
    
    
    
    </ion-content>

    Et un dummyDump.sql

    CREATE TABLE IF NOT EXISTS developer(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,skill TEXT,yearsOfExperience INTEGER);
    INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Simon', 'Ionic', '4');
    INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Jorge', 'Firebase', '2');
    INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Max', 'Startup', '5');

    Dés que je lance l'application ca m'affiche l'alerte "Erreur getAllDevelopers()".

    Il n'y à rien à faire je n'arrive pas à communiquer avec la BDD.

    Avez vous une piste ? 

    ps: Je suis obliger de build l'application pour tester sur téléphone (car le mode simulation ne fonctionne pas trop avec sqlite) donc je n'arrive pas à afficher correctement le contenus des erreurs, vous savez comment faire ?

    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2019 à 9:55:33

      Alors je peut pas t'aider pour ta galère avec sqlite ionic, mais pour afficher les erreurs dans ton console.[insert où tu veux les afficher], il faut que tu mette l'erreur dans un JSON.stringify(), comme ça: 

      console.error(JSON.stringify(err));
      • Partager sur Facebook
      • Partager sur Twitter
        25 octobre 2019 à 11:56:14

        Je cherche un mini projet IONIC 4 SQLite avec image upload!
        • Partager sur Facebook
        • Partager sur Twitter

        Ionic SQLITE

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown