How to use Sqlite with ionic 2 rc.0?

前端 未结 3 2186
猫巷女王i
猫巷女王i 2020-12-03 16:14

I would like to know how to use Sqlite with Ionic 2 rc.o release.I am finding it difficult as there are no examples for the latest version release and i am stuck.Nothing on

相关标签:
3条回答
  • 2020-12-03 16:49

    in app.module.ts

    import { SQLite } from '@ionic-native/sqlite';
    
     providers: [
            StatusBar,
            SplashScreen,
            SQLite,
            { provide: ErrorHandler, useClass: IonicErrorHandler }
        ]
    

    in database provider

    import { Injectable } from '@angular/core';
    import { Http } from '@angular/http';
    import 'rxjs/add/operator/map';
    //import { Storage } from '@ionic/storage';
    import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
    import { Platform } from 'ionic-angular';
    
    /*
      Generated class for the Database provider.
    
      See https://angular.io/docs/ts/latest/guide/dependency-injection.html
      for more info on providers and Angular 2 DI.
    */
    @Injectable()
    export class Database {
    
        DB_NAME: string = 'ssddb';
    
        constructor(public http: Http, public platform: Platform, public sqlite: SQLite) {
            this.platform.ready().then(() => {
                this.configureDatabase();
            });
        }
    
        configureDatabase() {
            this.query('CREATE TABLE IF NOT EXISTS EMP (key text primary key, value text)')
                .catch(err => {
                    console.error('Unable to create initial storage tables', err.tx, err.err);
                });
        }
    
        query(query: string, params: any[] = []): Promise<any> {
            return new Promise((resolve, reject) => {
                try {
                    this.sqlite.create({
                        name: this.DB_NAME,
                        location: 'default'
                    })
                        .then((db: SQLiteObject) => {
                            db.transaction((tx: any) => {
                                tx.executeSql(query, params,
                                    (tx: any, res: any) => resolve({ tx: tx, res: res }),
                                    (tx: any, err: any) => reject({ tx: tx, err: err }));
                            })
                        })
                        .catch(e => console.log(e));
                } catch (err) {
                    reject({ err: err });
                }
            });
        }
    
        get(key: string): Promise<any> {
            return this.query('select key, value from EMP where key = ? limit 1', [key])
                .then(data => {
                    if (data.res.rows.length > 0) {
                        return data.res.rows.item(0).value;
                    }
                });
        }
    
        set(key: string, value: string): Promise<any> {
            return this.query('insert into EMP(key, value) values (?, ?)', [key, value]);
        }
    
    }
    

    in page.ts

            this.database.set("333","ss");
    
     this.database.get("333").then(data => {
                console.log(data);
                let toast = this.toastCtrl.create({
                    message: data,
                    duration: 10000,
                    position: 'bottom'
                });
                toast.present();
            });
    
    0 讨论(0)
  • 2020-12-03 16:49

    On ionic-storage repo they say to use Ionic Native SQLite plugin. So like this:

    import { SQLite } from 'ionic-native';
    
    SQLite.openDatabase({
      name: 'data.db',
      location: 'default'
    })
      .then((db: SQLite) => {
    
        db.executeSql('create table danceMoves(name VARCHAR(32))', {}).then(() => {}).catch(() => {});
    
      })
      .catch(error => console.error('Error opening database', error));
    
    0 讨论(0)
  • 2020-12-03 17:06

    1) First of all, navigate to the root folder of your project and add the plugin:

    $ ionic plugin add cordova-sqlite-storage
    $ npm install --save @ionic-native/sqlite
    

    2) Create a new provider inside the project (in this example, called SqlStorage):

    $ ionic g provider sqlStorage
    

    3) I'd like to add an import to app.component.ts to initialize the plugin at startup, not mandatory:

    import {SqlStorage} from '../providers/sql-storage';
    ...
    ...
    constructor(public sqlStorage: SqlStorage){}
    

    4) Add entry to app.module.ts, mandatory:

    import { SQLite } from '@ionic-native/sqlite';
    import { SqlStorage } from '../providers/sql-storage';
    ...
    ...
    providers: [SQLite, SqlStorage]
    

    5) Define the sql-storage.ts provider:

    import { Injectable } from '@angular/core';
    import { Platform } from 'ionic-angular';
    import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
    
    @Injectable()
    export class SqlStorage {
    
        storage: any;
        DB_NAME: string = '__ionicstorage';
    
        constructor(public platform: Platform, public sqlite: SQLite) {
    
            this.platform.ready().then(() => {
    
                this.sqlite.create({ name: this.DB_NAME, location: 'default' })
                    .then((db: SQLiteObject) => {
                        this.storage = db;
                        this.tryInit();
                });
            });
        }
    
        tryInit() {
            this.query('CREATE TABLE IF NOT EXISTS kv (key text primary key, value text)')
            .catch(err => {
                console.error('Unable to create initial storage tables', err.tx, err.err);
            });
        }
    
        /**
         * Perform an arbitrary SQL operation on the database. Use this method
         * to have full control over the underlying database through SQL operations
         * like SELECT, INSERT, and UPDATE.
         *
         * @param {string} query the query to run
         * @param {array} params the additional params to use for query placeholders
         * @return {Promise} that resolves or rejects with an object of the form 
         * { tx: Transaction, res: Result (or err)}
         */
        query(query: string, params: any[] = []): Promise<any> {
            return new Promise((resolve, reject) => {
                try {
                    this.storage.transaction((tx: any) => {
                            tx.executeSql(query, params,
                                (tx: any, res: any) => resolve({ tx: tx, res: res }),
                                (tx: any, err: any) => reject({ tx: tx, err: err }));
                        },
                        (err: any) => reject({ err: err }));
                } catch (err) {
                    reject({ err: err });
                }
            });
        }
    
        /** GET the value in the database identified by the given key. */
        get(key: string): Promise<any> {
            return this.query('select key, value from kv where key = ? limit 1', [key])
            .then(data => {
                if (data.res.rows.length > 0) {
                    return data.res.rows.item(0).value;
                }
            });
        }
    
        /** SET the value in the database for the given key. */
        set(key: string, value: string): Promise<any> {
            return this.query('insert into kv(key, value) values (?, ?)', [key, value]);
        }
    
        /** REMOVE the value in the database for the given key. */
        remove(key: string): Promise<any> {
            return this.query('delete from kv where key = ?', [key]);
        }
    }
    

    6) In your .ts page:

    import {SqlStorage} from '../../providers/sql-storage';
    
    export class ExamplePage {
        constructor(public sqlStorage: SqlStorage) {
            // this.sqlStorage.query(...);
            // this.sqlStorage.get(key).then(data => {
            //    console.log(data);   
            // }
            //...
        }
    }
    

    Credit to: https://github.com/NickStemerdink with some personal changes. Hope it will help and works fine :)

    EDIT: Still works fine with Ionic v3.0.1 (2017-04-06)

    0 讨论(0)
提交回复
热议问题