0

我做了什么:

  1. 今天安装了离子,通过命令npm install -g ionic并对cordova集成说'y'。
  2. 安装科尔多瓦:npm install -g cordova
  3. 创建了一个新项目:ionic start sqlite3demo blank
  4. 安装的 Ionic 本机存储:

    ionic cordova plugin add cordova-sqlite-storage

    npm install --save @ionic-native/sqlite

现在是代码。我像这样SQLite导入app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
import { SQLite } from '@ionic-native/sqlite';

import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';

@NgModule({
  declarations: [
    MyApp,
    HomePage
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    SQLite
  ]
})
export class AppModule {}

然后,我像这样修改了默认主页:

<ion-header>
  <ion-navbar>
    <ion-title>
      SQLite demo
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <ion-content>

    <button ion-button (click)="createTables()">Create db</button>
    <p>Result: {{ message }}</p>

  </ion-content>
</ion-content>

最后,我home.ts这样修改:

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

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

  message = '';
  db: SQLiteObject;

  constructor(private platform: Platform, public navCtrl: NavController, private sqlite: SQLite) {
    this.platform.ready().then(() => {
      this.sqlite.create({
        name: 'todos.db',
        location: 'default'
      })
        .then((db: SQLiteObject) => {
          this.message = JSON.stringify(db);
          this.db = db;
        });
    });
  }

  public createTables() {
    return this.db.executeSql(
      `CREATE TABLE IF NOT EXISTS list (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT
      );`)
      .then(() => this.message = 'OK')
      .catch((err) => this.message = "error detected creating tables -> " + JSON.stringify(err));
  }

}

毕竟,我执行ionic cordova run android,我可以从 中看到 JSON db,但在那之后,我单击按钮创建一个表,而不是看到“确定”,而是从错误中看到 JSON。

开始

按下按钮后

我做错了什么?为什么它不起作用?

编辑:我使用的版本是:

"@ionic-native/sqlite": "^4.12.2",
"cordova-sqlite-storage": "^2.4.0"
4

2 回答 2

4

最后,正如这里所描述,文档已经过时。工作方式executeSql()是传递一个[]作为第二个参数。似乎 Ionic Native 团队并没有考虑过多地更新他们的文档。还有其他带有过时文档的插件,例如email composer,让开发人员在已经有解决方案的事情上浪费很多时间。

于 2018-09-21T06:59:46.053 回答
0

请注意,CREATE TABLE如果表已经存在,则会抛出异常。
CREATE TABLE IF NOT EXISTS如果该表不存在,查询将创建该表,否则通过抛出异常简单地忽略该命令。
如果您想创建一个表,那么您需要使用DROP TABLE IF EXISTSbefore删除现有表CREATE TABLE IF NOT EXISTS

于 2018-09-03T10:58:53.937 回答