2

I write a test tabs ionic 2 app use sqlite plugin. I wrapper the sqlite as provier:

import { SQLite, Device } from 'ionic-native';
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

/*
  Generated class for the SqliteHelper provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
@Injectable()
export class SqliteHelper {

  public db : SQLite;
  public log : string = "";
  constructor(public http: Http) {
    console.log('Hello SqliteHelper Provider');
  }

  public initDb() {
    this.db = new SQLite();
    this.log += "openDatabase。。。";
    // if (Device.device.platform)
    this.db.openDatabase({
      name: "data.db",
      location: "default"
    }).then((data) =>{
      this.log += ("open ok " + JSON.stringify(data));
    }, (err) => {
      this.log += ("open err " + err.message + " " + JSON.stringify(err));
    });
  }

  public executeSql(statement: string, parms:any) {
    return this.db.executeSql(statement, parms);
  }

}

And init sqlitehelper in app.components :

  constructor(platform: Platform, sqliteHelper : SqliteHelper, events: Events) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      sqliteHelper.initDb();
      events.publish("sqlite:inited", null);
      StatusBar.styleDefault();
      Splashscreen.hide();
    });
  }

And I load data from the first tabs page in constructor with platform.ready, run it on android will cause err: cannot read property executeSql of undefined.

If I load data from a button click, it's ok. or I put the loaddata to the second page's constructor, it's ok too.why?who can help me , I want to put code to the first page and load data at page started.

1 Answer 1

1

I had the same error when i try to insert in database for that reason i added "executeSql" function inside transaction:

     this.database.openDatabase({
                        name: "sis.db",
                        location: "default"
                    }).then(() => {

this.database.executeSql("CREATE TABLE IF NOT EXISTS profile(id integer primary key autoincrement NOT NULL ,name Text NOT NULL)", []).then((data) => { console.log('profile table created'); }, (error) => { console.log('Unable to create table profile'); })

this.database.transaction(tr => { tr.executeSql("insert into profile(id,name) values(12,'Ibrahim')", []); }).then(d => { console.log('Data inserted ya hima'); }, err => { console.error('unable to insert data into profile table'); });
                        this.database.executeSql("select id from profile", []).then(d => { console.log('inserted id=' + d.rows.item(0).app_id); }, err => { console.error('unable to get ID from profile table'); });

                        }, (error) => {console.error(error); }
                        );
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.