离子运行代码只创建一次数据库

时间:2018-04-18 12:02:53

标签: ionic-framework

我使用ionic创建了一个应用程序,在应用程序中我想创建并填充数据库,但我希望代码运行一次,而不是每次打开应用程序时。因为一旦第一次创建数据库,就不需要再次运行它了。

我用谷歌搜索了,我找不到答案, 我感谢任何人都有解决方案。

private dboptions: any = {
    name: 'ba.db',
    createFromLocation: 1,
    location: 'default'
  }
constructor(
    private sqlite: SQLite) {

    this.connectDB();

  }

  private connectDB(): any {
    this.sqlite.create(this.dboptions).then(
      (db: SQLiteObject) => {

        // create the table
        let sql = `CREATE TABLE ba ( 
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          name      VARCHAR (200)  NOT NULL UNIQUE,
          title     VARCHAR (200)`;
        db.executeSql(sql, []).then(success => {
          console.log('table created');

        }).catch(err => {
          console.log(err);

        })

      }
    )
      .catch(err => console.log(err));
  }

2 个答案:

答案 0 :(得分:1)

用户LocalStorage检查是否已经像这样创建了数据库。 Storage以下是有关如何向项目添加本地存储空间的链接。

private dboptions: any = {
  name: 'ba.db',
  createFromLocation: 1,
  location: 'default'
}
constructor(
  private sqlite: SQLite, , public storage: Storage) {

  this.storage.get("isDbPresent")
    .then((data) => {
      console.log(data);
      if (data === null) {
        this.connectDB();
        this.storage.get(Constants.storagekey)
      }
    })


}

private connectDB(): any {
   this.sqlite.create(this.dboptions).then(
    (db: SQLiteObject) => {

      // create the table
      let sql = `CREATE TABLE ba ( 
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name      VARCHAR (200)  NOT NULL UNIQUE,
        title     VARCHAR (200)`;
      db.executeSql(sql, []).then(success => {
        console.log('table created');

      }).catch(err => {
         console.log(err);

      })

    }
  )
    .catch(err => console.log(err));
}

答案 1 :(得分:0)

添加离子存储并在完成后保存标记。

app.module.ts中的

import { IonicStorageModule } from '@ionic/storage';

...
imports: [
   ...
   IonicStorageModule.forRoot()
],
...

在您的组件/提供商

import { Storage } from '@ionic/storage';

storage.ready().then(() => {
  storage.get('notFirstTime').then((notFirstTime:boolean) => {
    if (!notFirstTime){
      // Do what you want to do once
    }
    storage.set('notFirstTime', true);
  })
});
...

离子存储是持久的(当您安装cordova-sqlite-storage插件时)