How to use Sqlite with ionic 2 rc.0?

前端 未结 3 2196
猫巷女王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 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 {
            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 {
            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 {
            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 {
            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)

提交回复
热议问题