与数据库的离子项目

时间:2016-05-27 12:05:11

标签: angularjs mongodb sqlite ionic-framework firebase-realtime-database

我正在尝试创建一个移动项目,这是我在Ionic平台上的第一个项目。 同样,我必须学习Angular和Ionic。所以我决定制作一个简单的移动项目。 我在移动技术中搜索过数据库太多了所以我得到了很多像MongoDb,SQLite,Firebase等数据库所以我对在离子移动项目中应该使用哪个数据库感到困惑? 是否有任何数据库的初学者文档可以帮助我在离子项目中实现数据库?

非常感谢你。

2 个答案:

答案 0 :(得分:0)

为了训练目的,我建议不要试图一次性完成所有操作,而是建议只从Angular本身开始。然后,在第二个项目中,尝试Ionic。

角度的一些好的起点是:
https://www.codecademy.com/pt-BR/learn/learn-angularjs
http://www.learn-angular.org/

然后,对于Ionic我用过: https://thinkster.io/ionic-framework-tutorial

现在,特别关于数据库
Ionic与cordova合作,它创建了Web开发和移动本机功能之间的链接。它通过插件实现。

Nativelly Android和IOS支持SQLite。因此,如果您想使用尽可能多的原生资源,我认为SQLite是最佳选择。

最好的插件(恕我直言)是https://github.com/litehelpers/Cordova-sqlite-storage

使用此插件非常简单:

在Ionic cordova项目中,运行

cordova plugin add cordova-sqlite-storage

然后,在您的代码中,使用

访问数据库
var db = window.sqlitePlugin.openDatabase({name: 'my.db', location: 'default'}, successcb, errorcb);

然后,只需运行您的SQL:

db.executeSql("select length('tenletters') as stringlength", [], function (res) {
      var stringlength = res.rows.item(0).stringlength;
      console.log('got stringlength: ' + stringlength);
      document.getElementById('deviceready').querySelector('.received').innerHTML = 'stringlength: ' + stringlength;
   });

在插件网站上,还有更多示例。

但是,我再次建议先学习和平。

修改

回应评论:

在Database上添加信息很简单,几乎就像上面的SELECT示例一样。只需将数据作为数组传递,即执行executeSQL()的2º参数。像这样:

db.executeSql('INSERT INTO MyTable VALUES (?)', ['test-value'], function (resultSet) {
  console.log('resultSet.insertId: ' + resultSet.insertId);
  console.log('resultSet.rowsAffected: ' + resultSet.rowsAffected);
}, function(error) {
  console.log('SELECT error: ' + error.message);
});

看一下文档,还有其他例子。

答案 1 :(得分:0)

我一直在文章中游走,而不是我正在寻找的#34;答案。我发现了一个法语视频。这是:Ionic 3 Store Data

话虽如此,这里是如何设置你的代码,使ion3 cordova s​​qlite可行。

1)通过在npm或cmd提示符下运行这两个命令来导入本机sqlite。

  • ionic cordova plugin add cordova-sqlite-storage
  • npm install --save @ionic-native/sqlite

2)导入app.module.ts

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

3)在app.module.ts

中添加为提供者
providers: [
   ...
    SQLite,
   ...
  ]

4)创建一个新文件夹(如果你想使它成为一个不同的组件)并创建一个数据库ts文件。为了方便起见,我打电话给我的数据库.ts

5)添加以下代码(请注意这不是我使用的真实代码。只是一个例子。用户名和密码不应该以这种方式存储):

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


 @Injectable()
export class Database {

    theConsole: string = "Console Messages";

    options: any = {
        name: data.db,
        location: 'default',
        createFromLocation: 1
    }

    private db: SQLiteObject;

    constructor(private sqlite: SQLite) {

        this.connectToDb();
    }

    private connectToDb():void {

        this.sqlite.create(this.options)
            .then((db: SQLiteObject) => {

                this.db = db;
                var sql = 'create table IF NOT EXISTS `user` (username VARCHAR(255), password VARCHAR(255))';
                //IF you move the below statment out of here then the db variable will not be initialized
                //before you can use it to execute the SQL. 
                this.db.executeSql(sql, {})
                .then(() => this.theConsole += 'Executed SQL' + sql)
                .catch(e => this.theConsole += "Error: " + JSON.stringify(e));
            })
            .catch(e => this.theConsole += JSON.stringify(e));

    }

     addUser(username, password):void {

        var sql = "INSERT INTO `user` (username,password) VALUES ('"+username+"','"+ password+"')";

        this.db.executeSql(sql,{})
        .then(() => this.theConsole += "\n" + 'Executed SQL' + sql)
        .catch(e => this.theConsole += "Error: " + JSON.stringify(e));


    }
    getDealer() {
        var sql = "SELECT * FROM user";

        this.db.executeSql(sql, {})
            .then((result) => {
                this.theConsole += JSON.stringify(result);
                if (result.rows.length > 0) {
                    this.theConsole += 'Result' + result.rows.item(0);
                }
                this.theConsole += "\n" + result.rows.item(0).username+ result.rows.item(0).password;
                this.theConsole +=  "\n" +'Rows' + result.rows.length;

            })

            .catch(e => this.theConsole += JSON.stringify(e));
    }

    getConsoleMessages() {
        return this.theConsole;
    }
}

然后你只需要将数据库组件(Class)导入到你的一个页面中,你就可以通过运行这些函数或者创建你自己的RunSQL函数来访问数据库,你可以把它扔进去。

让我与离子网站混淆的部分实际上是他们展示了创造但不重用SQLiteObject的事实。 通过添加:

private db: SQLiteObject;

到我的代码中声明类变量和初始化db对象:

 ...
 this.sqlite.create(this.options)
            .then((db: SQLiteObject) => {

                this.db = db;
 ...

我能够重复使用db变量而无需反复打开数据库连接。

6)将组件类导入页面

import { Database } from '../../data/database';

我使用此网站:ionic native sqlite来了解如何设置它以及前面提到的法语视频。我希望我能找到我希望可以帮助其他人打同一个sqlite墙。我希望我能早点找到我今天发现的东西。我希望可以帮助其他人点击同样的sqlite墙。