ionic項(xiàng)目中sqlite的簡(jiǎn)單運(yùn)用

1. 創(chuàng)建一個(gè)ionic模板項(xiàng)目

$ionic start IonicDemo tabs && cd ./IonicDemo
$ionic cordova platform add ios

2. 安裝插件

$ionic cordova plugin add cordova-sqlite-storage
$npm i -S @ionic-native/sqlite@^4.0.0 //指定版本號(hào)兼容ionic3

3. 修改文件

替換/IonicDemo/src/app/app.module.ts為

import { NgModule, ErrorHandler } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { SQLite } from '@ionic-native/sqlite';
import { AboutPage } from '../pages/about/about';
import { ContactPage } from '../pages/contact/contact';
import { HomePage } from '../pages/home/home';
import { TabsPage } from '../pages/tabs/tabs';

import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

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

替換/IonicDemo/src/pages/about/about.html為

<ion-header>
  <ion-navbar>
    <ion-title>
      About
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>

  <button ion-button (click)="initDataBase()">初始化數(shù)據(jù)庫</button>
  
  <button ion-button (click)="insertData('Tom', '12345678910')">插入數(shù)據(jù)</button> 
  
  <button ion-button (click)="updateData('Tom', '12312312312')">更新數(shù)據(jù)</button> 

  <button ion-button (click)="deleteData('Tom')">刪除數(shù)據(jù)</button> 

  <button ion-button (click)="queryData('Tom')">查詢數(shù)據(jù)</button> 

</ion-content>

替換/IonicDemo/src/pages/about/about.ts為

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

@Component({
  selector: 'page-about',
  templateUrl: 'about.html'
})

export class AboutPage {

  database: SQLiteObject;

  constructor(public navCtrl: NavController,private sqlite:SQLite,public toastCtrl : ToastController) {

  }
  /*
    //頁面加載時(shí)調(diào)用
    ionViewDidLoad() {
      this.initDataBase();
    }
  
    //頁面即將進(jìn)入時(shí)調(diào)用
    ionViewWillEnter() {
      this.initDataBase();
    }
  */
    //創(chuàng)建數(shù)據(jù)庫
  initDataBase(){
    this.sqlite.create({
      name: 'data.db',
      location: 'default'
    })
      .then((db: SQLiteObject) => {
        db.executeSql('create table if not exists person(id integer primary key autoincrement,name varchar(20),phone varchar(11))', [])
          .then(() => console.log('Executed SQL'))
          .catch(e => console.log(e));

        this.database = db;
      });
  }

  //增
  insertData (name: string, phone: string) {
      this.database.executeSql('insert into person(name,phone) values(?,?)', [name, phone])
      .then(() => {
          let toast = this.toastCtrl.create({
          message: 'insertData success',
          duration: 2000,
          position: 'top'
          });
        toast.present(toast);
    
      })
      .catch(e => console.log(e))
  }

  //改
  updateData(name: string, phone: string) {
        this.database.executeSql('update person set phone=?  where name=?', [phone, name])
      .then(() => {
          let toast = this.toastCtrl.create({
          message: 'updateData success',
          duration: 2000,
          position: 'top'
          });
        toast.present(toast);
    
      })
      .catch(e => console.log(e))
  }

  //刪
  deleteData(name: string) {
        this.database.executeSql('delete from person where name=?', [name])
      .then(() => {
          let toast = this.toastCtrl.create({
          message: 'deleteData success',
          duration: 2000,
          position: 'top'
          });
        toast.present(toast);
    
      })
      .catch(e => console.log(e))
  }

  //查
  queryData(name: string) {
      this.database.executeSql("select phone from person where name=?", [name]).then((data) => {
          let toast;
          if (data.rows.length != 0) {
              toast = this.toastCtrl.create({
                  message: '數(shù)據(jù)已存在',
                  duration: 2000,
                  position: 'top'
              });
              toast.present(toast);
        } else {
              toast = this.toastCtrl.create({
                  message: '數(shù)據(jù)不存在',
                  duration: 2000,
                  position: 'top'
              });
        }
        toast.present(toast);
    });
  }
}

4. 編譯項(xiàng)目

$ionic build --prod
$ionic cordova prepare ios

5. 在Xcode中運(yùn)行項(xiàng)目

它應(yīng)該是這樣的


Simulator Screen Shot - iPhone 11 Pro Max - 2019-11-29 at 01.17.08.png

在模擬器about頁面中可以看到幾個(gè)菜單素邪,在點(diǎn)擊"初始化數(shù)據(jù)庫"之后就可以增刪改查了!

控制臺(tái)會(huì)打印沙盒中DB的路徑齿风,可以查看結(jié)果是否正確!

Just do it!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溺忧,一起剝皮案震驚了整個(gè)濱河市突梦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笛辟,老刑警劉巖功氨,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異手幢,居然都是意外死亡捷凄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門围来,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跺涤,“玉大人匈睁,你說我怎么就攤上這事⊥按恚” “怎么了航唆?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)院刁。 經(jīng)常有香客問我糯钙,道長(zhǎng),這世上最難降的妖魔是什么退腥? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任任岸,我火速辦了婚禮,結(jié)果婚禮上狡刘,老公的妹妹穿的比我還像新娘享潜。我一直安慰自己,他們只是感情好嗅蔬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布米碰。 她就那樣靜靜地躺著,像睡著了一般购城。 火紅的嫁衣襯著肌膚如雪吕座。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天瘪板,我揣著相機(jī)與錄音吴趴,去河邊找鬼。 笑死侮攀,一個(gè)胖子當(dāng)著我的面吹牛锣枝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兰英,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼撇叁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了畦贸?” 一聲冷哼從身側(cè)響起陨闹,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎薄坏,沒想到半個(gè)月后趋厉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胶坠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年君账,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沈善。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乡数,死狀恐怖椭蹄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情净赴,我是刑警寧澤塑娇,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站劫侧,受9級(jí)特大地震影響埋酬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烧栋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一写妥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧审姓,春花似錦珍特、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酬姆,卻和暖如春嗜桌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辞色。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工骨宠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人相满。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓层亿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親立美。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匿又,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356