Membuat Aplikasi CRUD Android dan IOS dengan SQLite pada IONIC 3

  1. pertama – tama, ketik pada cmd anda ionic start BookStoreApp blank

2. Input y

3. Input n

4. Apabila proses instalasi sudah selesai, masuk ke folder anda dengan mengetik cd BookStoreApp

5. Kemudian install plugin SQLite, ketik ionic cordova plugin add cordova-sqlite-storage

6. Apabila muncul error, kita perlu install cordova secara global seperti gambar di bawah

7. Ketik npm i -g cordova

8. Kemudian ketik npm install –save @ionic-native/sqlite@4

9. Kemudian buka folder project BookStoreApp menggunakan IDE anda, masuk ke dalam src/app/app.module.ts untuk import plugin SQLite. Tambahkan import { SQLite } from ‘@ionic-native/sqlite’; serta SQLite seperti gambar di bawah.

10. Lalu kita akan membuat provider untuk database, ketik ionic generate provider database

11. Ubah code yang ada dalam src/provider/database/database.ts. Masukkan code di bawah

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

@Injectable()
export class DatabaseProvider {
    db:SQLiteObject = null;

    constructor(private sqlite: SQLite) { }

    getOrGenerateDB() {
        // Generate DB adalah proses asynchronus, jadi bagusnya kita pakai promise
        // Walaupun prosesnya hanya sepersekian detik, tetap saja harus di tunggu.
        return new Promise((resolve, reject) => {
            if (this.db != null) {
                resolve(this.db)
            } else {
                this.sqlite.create({
                    name        : 'myDatabase.db',
                    location    : 'default'
                }).then((db: SQLiteObject) => {
                    this.db = db;
                    resolve(this.db)
                }).catch((e) => {
                    console.log(e);
                    reject(e);
                });
            }
        });
    }
   
    createTable() {
        this.getOrGenerateDB().then((db: SQLiteObject) => { 
            var sql = 'create table IF NOT EXISTS buku (' +
            'id INTEGER PRIMARY KEY AUTOINCREMENT, '+ 
            'judul VARCHAR(255), '+
            'penerbit VARCHAR(50), '+  
            'pengarang VARCHAR(50))';

            db.executeSql(sql, {})
                .then(() => console.log('tabel buku berhasil di create'))
                .catch(e => console.log(e));

            // db.executeSql('DELETE FROM buku', {})
            //     .then(() => console.log('tabel buku berhasil di delete'))
            //     .catch(e => console.log(e));

            // db.executeSql('INSERT INTO buku values (?, ?,?,?)', 
            //               [null, "judullll", "penerbittt", "ppengarang OKEOKE"])
            //     .then(() => console.log('tabel buku berhasil di tambah'))
            //     .catch(e => console.log(e));


            // Untuk create table lainnya bisa ditambahkan di sini
            // contoh
            // var sql = 'create Tabel 2 IF NOT EXISTS delivery_form (' +
            //     'number VARCHAR(255) PRIMARY KEY, '+ 
            //     'round_id VARCHAR(255), '+
            //     'state VARCHAR(50), '+  
            //     'has_returns INTEGER(2), '+  
            //     'has_annotations INTEGER(2))';
            // db.executeSql(sql, {})
            //     .then(() => console.log('delivery_form table has created'))
            //     .catch(e => console.log(e));
        })
    }

}

12. Ubah code yang ada dalam src/app/pages/home/home.ts. Masukkan code di bawah . Disini kita akan membuat fungsi untuk menampilkan semua data pada database.

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

import { DatabaseProvider } from '../../providers/database/database';

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

export class HomePage {
    data:any=[];
    
    constructor(public navCtrl: NavController, public zone: NgZone,
                public db: DatabaseProvider) { }

    ionViewDidEnter() { 
        this.db.getOrGenerateDB().then((db: SQLiteObject) => { 
            db.executeSql('SELECT * FROM buku', {}).then(res => {
                this.data = [];
                this.zone.run(() => {
                    for (var i = 0; i < res.rows.length; i++) {
                        this.data.push({
                            id: res.rows.item(i).id,
                            judul: res.rows.item(i).judul
                        })
                    }
                })
            }).catch(e => console.log(e));
        });
    }

    edit(id) {
         this.navCtrl.push("BookformPage", {bookID: id})
    }

    add() {
        this.navCtrl.push("BookformPage")
    }

}

13. Ubah code yang ada dalam src/app/pages/home/home.html. Masukkan code di bawah . Disini kita akan membuat halaman untuk menampilkan semua data pada database.

<ion-header>
  <ion-navbar>
    <ion-title>
      Ionic CRUD SQLite
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
   <ion-scroll scrollY="true" direction="xy" style="height: 100vh;">
        <ion-list >
            <ion-item tappable *ngFor="let a of data; let index = index" (click)="edit(a.id)" >
                {{a.judul}} 
            </ion-item>
        </ion-list>
    </ion-scroll>
    <ion-fab bottom right>
      <button ion-fab (click) = "add()" >Add</button>
    </ion-fab>
</ion-content>

14. Sekarang kita akan membuat sebuah halaman input data buku, ketik ionic generate page bookform

15. Ubah code yang ada dalam src/app/pages/bookform/bookform.ts. Masukkan code di bawah . Disini kita akan membuat fungsi untuk tambah data, ubah, serta hapus.

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, ToastController } from 'ionic-angular';
import { SQLiteObject } from '@ionic-native/sqlite';
import { DatabaseProvider } from '../../providers/database/database';


@IonicPage()
@Component({
    selector: 'page-bookform',
    templateUrl: 'bookform.html',
})
export class BookformPage {
    book: any = {
        judul: '',
        penerbit: '',
        pengarang: ''
    }
    title = '';
    bookID = '';
    toaster: any;

    constructor(public navCtrl: NavController, public navParams: NavParams, 
                public toastCtrl: ToastController, public db: DatabaseProvider) {
        this.title = 'Tambah Buku';
        this.bookID = navParams.get("bookID");
        if (this.bookID != null || this.bookID != undefined) {
            this.title = 'Edit Buku';
        }
        this.toaster = this.toastCtrl.create({
            duration: 3000,
            position: 'bottom'
        });
    }

    ionViewDidLoad() {
        if (this.bookID != '') {
            this.db.getOrGenerateDB().then((db: SQLiteObject) => { 
                db.executeSql('SELECT * FROM buku where id = ?', [this.bookID]).then(res => {
                    this.book = {
                        id: res.rows.item(0).id,
                        judul: res.rows.item(0).judul,
                        penerbit: res.rows.item(0).penerbit,
                        pengarang: res.rows.item(0).pengarang
                    }
                }).catch(e => console.log(e));
            });
        }
    }

    save() {
        if (this.book.judul == '' || this.book.penerbit == '' || this.book.pengarang == '') {
            this.toaster.setMessage('All fields are required');
            this.toaster.present();
        } else {
            // Jika edit
            if (this.bookID) {
                var sql = 'UPDATE buku SET judul=?, penerbit=?, pengarang=? where id = ?';
                var param = [this.book.judul, this.book.penerbit, this.book.pengarang, this.book.id];
            } else {
                console.log(this.book);
                param = [null, this.book.judul, this.book.penerbit, this.book.pengarang]
                sql = 'INSERT INTO buku values (?,?,?,?)';
            }

            this.db.getOrGenerateDB().then((db: SQLiteObject) => { 
                db.executeSql(sql, param).then(res => {
                    setTimeout(()=>{
                        this.navCtrl.pop();
                    }, 300) 
                }).catch(e => console.log(e));
            });
        }
    }

    deleteBook() {
        this.db.getOrGenerateDB().then((db: SQLiteObject) => { 
            db.executeSql('DELETE FROM buku where id = ?', [this.bookID]).then(res => {
                setTimeout(()=>{
                    this.navCtrl.pop();
                }, 300) 
            }).catch(e => console.log(e));
        });
    }
}

16 . Ubah code yang ada dalam src/app/pages/bookform/bookform.html Masukkan code di bawah . Disini kita akan membuat tampilan input data buku.

<ion-header>
    <ion-navbar>
     <ion-title> {{ title }} </ion-title>
    </ion-navbar>
</ion-header>

<ion-content padding>
    <ion-list>
        <ion-item>
            <ion-label floating>Judul</ion-label>
            <ion-input type="judul" [(ngModel)] = "book.judul" ></ion-input>
        </ion-item>
        <ion-item>
            <ion-label floating>Penerbit</ion-label>
            <ion-input type="penerbit" [(ngModel)] = "book.penerbit" ></ion-input>
        </ion-item>
        <ion-item>
            <ion-label floating>Pengarang</ion-label>
            <ion-input type="pengarang" [(ngModel)] = "book.pengarang" ></ion-input>
        </ion-item>
        <ion-item text-center>
            <button ion-button round style="min-width: 200px; padding: 10px 16px" (click) = "save()">Save</button>
            <br/>
            <button ion-button round style="min-width: 200px; padding: 10px 16px" (click) = "deleteBook()">Delete</button>
        </ion-item>
    </ion-list>
</ion-content>

17. Kemudian panggil fungsi createTable ( ) pada DatabaseProvider

18. Langkah terakhir dengan menambahkan satu parameter pada MyApp Constructor untuk mengaktifkan fungsi createTable ( ) pada DatabaseProvider

19. Sekarang bisa anda coba dengan emulator atau smartphone ,

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top