【问题标题】:Working with Cordova Sqlite plugin in ionic 2在 ionic 2 中使用 Cordova Sqlite 插件
【发布时间】:2016-10-18 14:22:58
【问题描述】:

我是 ionic 2 开发的新手(也没有使用 ionic-1)。

我正在尝试在应用程序中使用cordova s​​qlite 插件。我关注了Use SQLite in Ionic 2 链接。能够使用以下命令将插件添加到项目中。

$ ionic 插件添加cordova-sqlite-storage

在真实设备上部署应用程序后,创建并打开了data.db,并成功创建了peopletable。 以下是来自 Xcode 的日志:

2016-10-17 16:29:16.435992 SqlProject[238:3982] -[SQLitePlugin pluginInitialize] [第 67 行] 路径没有云同步:/var/mobile/Containers/Data/Application/DFDADD59-D48E-4D4C -B8F0-23EEDE169471/图书馆/本地数据库 2016-10-17 16:29:16.436138 SqlProject[238:4034] -[SQLitePlugin openNow:] [第 137 行] 打开完整的数据库路径:/var/mobile/Containers/Data/Application/DFDADD59-D48E-4D4C-B8F0- 23EEDE169471/图书馆/LocalDatabase/data.db 2016-10-17 16:29:16.443765 SqlProject[238:4034] -[SQLitePlugin openNow:] [第 163 行] 好消息:SQLite 是线程安全的! 2016-10-17 16:29:16.448487 SqlProject[238:3982] 打开数据库:data.db - OK 2016-10-17 16:29:16.463667 SqlProject[238:3982] 表已创建: [object Object]

打开数据库的代码:

从 'ionic-native' 导入 { SQLite };

 constructor(platform: Platform) {
   platform.ready().then(() => {
   StatusBar.styleDefault();

   let database = new SQLite();
        database.openDatabase({
            name: "data.db",
            location: "default"
        }).then(() => {
            database.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)", {}).then((data) => {
                console.log("TABLE CREATED: ", data);

            }, (error) => {
                console.error("Unable to create table", error);

            })
        }, (error) => {

            console.error("Unable to open database", error);
        });
   });
}

但是,现在我在 InsertingFetching 数据库中的记录时遇到了错误。

 public add() {

 console.log("Inside the add function- ");

 this.database.executeSql("INSERT INTO people (firstname, lastname) VALUES (?, ?)", ['mahesh', 'bhalerao']).then((data) => {

   console.log("INSERTED: " + JSON.stringify(data));

 }, (error) => {
   console.log("ERROR: " + JSON);
 });
}

 public fetchRecords() {

    this.database.executeSql("SELECT * FROM people", []).then((data) => {
               alert("executeSql refresh function success");

        this.people = [];

        if(data.rows.length > 0) {
            for(var i = 0; i < data.rows.length; i++) {
                this.people.push({firstname: data.rows.item(i).firstname, lastname: data.rows.item(i).lastname});
            }
        }
    }, (error) => {
        console.log("ERROR: " + JSON.stringify(error.err));
    });
}

我收到未定义的错误。

错误:未定义

不知道出了什么问题。

任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 你确定这个插件支持promise吗?如果我没记错的话,您必须使用返回结果集的成功回调。您能否展示请展示更多相关代码(例如 this.database 是什么以及它是如何打开和处理的)
  • @Fylax 我已经添加了打开数据库的相关信息。

标签: database sqlite cordova cordova-plugins ionic2


【解决方案1】:

第一个sn-p,第五行:你有let database = new SQLite();;你在磁盘上创建数据库(如果它还不存在的话),然后你退出构造函数。

由于let 的作用域,一旦您退出协构函数,database 变量将不存在,addfetch 方法从未存在过。

您应该将database 放入一个属性中(即方法正在寻找它的位置)而不是let,然后一切都会正常工作。

换句话说,你应该有一个类似的代码:

public database: SQLite //here the attribute

constructor(platform: Platform) {
   platform.ready().then(() => {
   StatusBar.styleDefault();

   this.database = new SQLite(); //here you initialize the attribute instead of a volative variable
   this.database.openDatabase({ //in this block you open an then populate the attribute
            name: "data.db",
            location: "default"
        }).then(() => {
            database.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)").then((data) => {
                console.log("TABLE CREATED: ", 
            }, (error) => {
                console.error("Unable to create table", error);
            });
        }, (error) => {
            console.error("Unable to open database", error);
        });
   });
}

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 2016-12-15
    • 2017-02-05
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    相关资源
    最近更新 更多