【问题标题】:cannot read property 'split' of undefined sqlite ionic-v3 & SQLite无法读取未定义的 sqlite ionic-v3 和 SQLite 的属性“拆分”
【发布时间】:2020-08-21 15:40:38
【问题描述】:

我正在使用 ionic-v3 和 sqlite 插件。我正在尝试创建简单的数据库并在其中插入一条记录,然后通过 SELECT Query 检索该记录。

我遇到的问题是不会创建数据库,并且会为我显示一个错误“无法读取未定义 sqlite 的属性 'split'” 这将在我第一次编写 try & catch 时出现在代码中。

$ ionic cordova plugin add cordova-sqlite-storage
$ npm install @ionic-native/sqlite
import { Component } from '@angular/core';
import { NavController, ToastController, Platform } from 'ionic-angular';
import { SQLite, SQLiteObject } from '@ionic-native/sqlite/ngx';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  private db: SQLiteObject;
  public movies: string[] = [];
  public message:any;

  constructor(public navCtrl: NavController, private toastCtrl: ToastController, private sqlite: SQLite, platform: Platform) {
    platform.ready().then(() => {
      this.CreateDatabase();
    });
  }

  CreateDatabase()
  {
    try
    {

      this.sqlite.create({
        name: 'data.db',
        location: 'default'
      })
        .then((db: SQLiteObject) => {

          db.executeSql('create table IF NOT EXISTS Movies(id INTEGER PRIMARY KEY, name VARCHAR(32))', [])
          .then(() => {
            console.log('Table Movies created !');
            this.db.executeSql('INSERT INTO `Movies` VALUES (`1`, `James Bond 007`)', [])
            .then(() => console.log('Executed SQL'))
            .catch(e => this.message = e);

        })
        .catch(e => this.message = e);


        })
        .catch(e => this.message = e);
    }
    catch(err)
    {
      this.presentToast(err);
    }

  }

  public retrieveFilms() {

    try 
    {
      this.db.executeSql('SELECT name FROM `Movies`', [])
      .then((data) => {
        if(data == null) {
          return;
        }

        if(data.rows) {
          if(data.rows.length > 0) {
            for(var i = 0; i < data.rows.length; i++) {
              this.movies.push(data.rows.item(i).name);
            }
          }
        }

      }).catch(e => this.presentToast(JSON.stringify(e)));
    }
    catch(err)
    {
      this.presentToast(err);
    }

  }

  presentToast(messageText) {
  let toast = this.toastCtrl.create({
    message: messageText,
    duration: 3000,
    position: 'bottom'
  });

  toast.onDidDismiss(() => {
    console.log('Dismissed toast');
  });

  toast.present();
}

}

我在这里做错了什么?我已经在 stackoverflow 中尝试了所有内容,甚至从 youtube 中的教程或 ionic 文档中尝试了所有内容。但对我没有任何作用!

【问题讨论】:

    标签: angular sqlite ionic-framework ionic3 storage


    【解决方案1】:

    使用旧的 ionic-native/sqlite 版本 4.x.x 而不是 5.x.x。 在 Ionic 3 中使用最新的 ionic-native/sqlite 时,我遇到了同样的问题。

    使用 npm 卸载旧插件或在 package.json 文件中更改它。

    而且你需要换行:

    import { SQLite, SQLiteObject } from '@ionic-native/sqlite/ngx';
    

    import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
    

    【讨论】:

    • 我试过你的解决方案,它解决了部分问题。当前错误是(TypeError:无法读取未定义的属性'executeSql')。
    • 这对我有用。正在使用@ionic-native/sqlite@5.9.0。卸载它并安装npm install @ionic-native/sqlite@4.20.0,问题就消失了。
    • 救命稻草。谢谢。在这个问题上挣扎了太久。 @TheSammie 感谢您提供更深入的细节,100% 有效
    • 为我工作更改为旧版导入并使用 npm install @ionic-native/sqlite@4.20.0 进行安装
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2020-09-07
    相关资源
    最近更新 更多