Belajar Nodejs #12: Menggunakan Database SQLite pada Nodejs
Pada tutorial sebelumnya, kita sudah mencoba menggunakan database MySQL pada Nodejs.
Sekarang kita akan mencoba menggunakan SQLite pada Nodejs.
Apa bedanya SQLite dengan MySQL?
SQLite merupakan database RDBMS (Relational Database Management System) yang tidak membutuhkan server.
Sedangkan MySQL membutuhkan server.
SQLite menyimpan database pada file .db
atau .sqlite3
.
SQLite biasanya digunakan pada aplikasi desktop dan mobile. Sedangkan MySQL biasanya digunakan pada aplikasi web.
Jika kamu baru pertama mendengar SQLite, saya sarankan untuk membaca “tutorial SQLite untuk pemula” terlebih dahulu.
Setelah itu, silakan lanjut ke tutorial ini.
Baiklah, langsung saja kita mulai…
Peralatan dan Modul yang Dibutuhkan
Pertama, pastikan sqlite3
sudah terinstal di komputermu. Karena sqlite3
akan kita gunakan untuk membuat database.
Silakan instal dengan perintah berikut:
sudo apt install sqlite3
Tekan y
terus Enter
, lalu tunggu sampai prosesnya selesai.
Kedua, kita membutuhkan modul sqlite3
pada nodejs untuk menghubungkan SQLite dengan Nodejs.
Silakan buat project baru dengan membuat direktori bernama nodejs-sqlite
.
Ketik perintah berikut:
mkdir nodejs-sqlite
cd nodejs-sqlite
npm init -y
Perintah ini akan membuat folder baru bernama nodejs-sqlite
dan di dalamnya akan terdapat file package.json
.
Setelah itu, jalankan perintah berikut untuk menginstal modul sqlite3
.
npm install sqlite3@4.0.2
Tunggu sampai prosesnya selesai…
Berikutnya kita akan membuat database baru.
Membuat Database SQLite
Database SQLite tersimpan dalam file .db
, kita harus membuat file ini menggunakan perintah sqlite3
.
Sebelum melakukan itu, silakan buat direktori baru bernama db
di dalam direktori nodejs-sqlite
.
mkdir db
Setelah itu ketik perintah berikut untuk membuat database baru:
sqlite3 db/playlist.db
Kita akan membuat database bernama playlist.db
yang nanti isinya ada tabel favorite_songs
untuk menyimpan daftar lagu favorit.
Tampilan di atas artinya: Saat ini kita sedang berada di dalam shell SQLite.
Silakan keluar dari shell tersebut, dengan menekan tombol Ctrl
+d
.
Setelah itu, untuk memastikan file database berhasil dibuat, ketik perintah berikut.
tree db
Jika ada file baru bernama playlist.db
, maka artinya: pembuatan database berhasil.
Berikutnya, kita akan menghubungkan SQLite dengan Node.
Menghubungkan SQLite dengan Program Nodejs
Silakan buat file baru bernama db_config.js
, kemudian isi dengan kode berikut:
const sqlite3 = require('sqlite3').verbose();
const dbFile = __dirname + "/db/playlist.db";
const db = new sqlite3.Database(dbFile, sqlite3.OPEN_READWRITE, (err) => {
if(err) throw err;
});
module.exports = db;
Penjelasan:
Pertama kita mengimpor modul sqlite3
dengan mode verbose()
agar dapat menampilkan pesan error.
const sqlite3 = require('sqlite3').verbose();
Lalu kita menentukan alamat file database-nya:
const dbFile = __dirname + "/db/playlist.db";
Setelah itu, kita mencoba melakukan koneksi ke database dengan membuat objek db
dari class sqlite3.Database()
.
Ada tiga parameter yang kita berikan pada class ini:
- Alamat path file database-nya (
dbFile
); - Mode yang digunakan (
sqlite3.OPEN_READWRITE
); - Fungsi callback yang akan dieksekusi.
Terdapat tiga macam mode yang bisa berikan untuk parameter yang ke-2:
sqlite3.OPEN_READONLY
: buka database untuk dibaca saja (read-only).sqlite3.OPEN_READWRITE
: buka database untuk dibaca dan ditulis.sqlite3.OPEN_CREATE
: buka database dan buat database baru apabila belum ada.
Kemudian pada baris terakhir, kita mengekspor objek db
agar nanti bisa diimpor dari script lainnya.
module.exports = db;
Oke, sekarang coba eksekusi db_config.js
.
Ini artinya kita sudah berhasil terhubung dengan database playlist.db
.
Kalau gagal bagaimana?
Biasanya kalau gagal akan tampil seperti ini:
Ini gagal yang disebabkan karena nama database-nya salah atau database-nya belum ada.
Berikutnya kita akan membuat tabel, sebelumnya silakan hapus baris ini:
console.log("Koneksi ke database berhasil!");
Agar tidak mengganggu.
Membuat Tabel SQLite
Kita akan membuat tabel melalui Nodejs.
Silakan buat file baru bernama create_table.js
, kemudian isi dengan kode berikut:
const db = require("./db_config");
let sql = `CREATE TABLE IF NOT EXISTS favorite_songs(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(64),
artist VARCHAR(64)
);`;
db.run(sql, (err, result) => {
if (err) throw err;
console.log("Table created");
});
db.close();
Penjelasan:
Pada kode SQL, kita akan membuat tabel dengan nama favorite_songs
, kemudian di dalamnya kita membuat tiga kolom:
id
untuk menampung id. Kolom ini akan menjadiPRIMARY KEY
dan akan diisi otomatis denganAUTOINCREMENT
.title
untuk menyimpan judul lagu, panjangnya 64 karakter dengan tipe string atau varchar.artist
untuk menyimpan nama artis, panjangnya 64 karakter dengan tipe string atau varchar.
Lalu kita eksekusi sql
untuk pembuatan tabel dengan fungsi db.run()
.
Nanti pesan "Table create"
akan ditampilkan, apabila eksekusi query berhasil.
Terakhir…
Kita menutup database dengan fungsi db.close()
, karena koneksi sudah tidak digunakan lagi.
Oke, kalau begitu mari kita coba jalankan program create_table.js
.
Untuk memastikan, coba masuk ke shell SQLite.
Ikuti perintah berikut:
sqlite3 db/playlist.db # masuk ke shell
.tables
.schema favorite_songs
Jika hasilnya seperti ini…
…maka kita sudah berhasil membuat tabel.
Berikutnya kita akan mengisi data ke tabel.
Menambahkan Data ke SQLite
Insert data ke tabel SQLite, caranya tidak jauh berbeda dengan pembuatan tabel.
Langkah-langkahnya:
- Eksekusi
db.serialize()
; - lalu di dalamnya buat query;
- eksekusi query dengan
db.run()
.
Mari kita coba…
Silakan buat file baru dengan nama insert.js
dan isi sebagai berikut:
const db = require("./db_config");
let sql = `INSERT INTO favorite_songs (title, artist)
VALUES ('First Love', 'Utada Hikaru')`;
db.run(sql, (err) => {
if (err) throw err;
console.log("1 record inserted");
});
db.close();
Setelah itu, coba eksekusi insert.js
.
Berhasil!
Kita baru hanya menambahkan satu data saja. Berikutnya kita akan coba menambahkan lebih banyak data.
Bagaimana caranya?
Caranya hampir sama.
Tapi saat eksekusi query, kita harus menggunakan perulangan. Karena ada banyak data yang akan ditambahkan.
Mari kita coba…
Buatlah file baru bernama insert_multi.js
, kemudian isi dengan kode berikut:
const db = require("./db_config");
const sql = `INSERT INTO favorite_songs (title, artist) VALUES (?,?)`;
const stmt = db.prepare(sql);
const songs = [
["Dear God", "Avenged Sevenfold"],
["No Matter", "Akon"],
["No Wonem No Cry", "Bob Marley"],
["Umbrella", "Rihana"],
];
songs.forEach((song) => {
stmt.run(song, (err) => {
if (err) throw err;
});
});
console.log(`${songs.length} record inserted`);
stmt.finalize();
db.close();
Coba eksekusi insert_multi.js
.
Berhasil!
Perhatikan kode program di atas…
Karena kita akan mengeksekusi banyak query, maka kita gunakan statement stmt
.
let stmt = db.prepare(sql);
Ini biasanya digunakan untuk transaction.
Lalu setelah itu, kita buat perulangan berdasarkan panjang array dari songs
dengan menggunakan method forEach()
.
songs.forEach((song) => {
stmt.run(song, (err) => {
if (err) throw err;
});
});
Di dalam perulangan, kita mengeksekusi query dengan memanggil fungsi run()
dari objek stmt
.
Lalu kita berikan parameter song
agar tanda tanya yang ada di dalam SQL terisi dengan data yang ada di dalam array.
Terakhir…
Kita tutup transaction dengan fungsi stmt.finalize()
dan menutup database dengan db.close()
.
Membaca Data dari SQLite
Khusus untuk membaca data, method atau fungsi yang digunakan berbeda dengan yang lainnya.
Ada dua method yang bisa digunakan:
db.all()
untuk mengambil semua data dari hasil query;db.get()
untuk mengambil satu data dari hasil query;
Method db.all()
akan menghasilkan sebuah array yang berisi objek dari masing-masing row atau data.
Sedangkan method db.get()
akan menghasilkan sebuah objek dari data.
Untuk lebih jelasnya…
…mari kita coba.
Buatlah file baru bernama select.js
, kemudian isi dengan kode berikut:
const db = require("./db_config");
const sql = "SELECT * FROM favorite_songs";
db.all(sql, (err, rows) => {
if (err) throw err;
if (rows.length > 1) {
// cetak isi rows
rows.forEach((song) => {
console.log(`[${song.id}] ${song.artist} - ${song.title}`);
});
} else {
console.log("tidak ada data/hasil");
}
});
db.close();
Hasilnya:
Perhatikan kode berikut…
db.all(sql, (err, rows) => {
if (err) throw err;
if(rows.length > 1){
// cetak isi rows
rows.forEach(song => {
console.log(`[${song.id}] ${song.artist} - ${song.title}`);
});
} else {
console.log("tidak ada data/hasil");
}
});
Hasil query akan disimpan dalam variabel rows
, variabel ini akan berisi sebuah array.
Karena itu, kita menggunakan method forEach()
untuk membuat perulangan dan menampilkan isinya.
Berikutnya kita akan coba mengambil satu data saja…
Bagaimana caranya?
Caranya sama, kita tinggal ubah SQL dan fungsi db.all()
menjadi db.get()
.
Mari kita coba…
Buatlah file baru bernama select_one.js
, kemudian isi dengan kode berikut:
const db = require("./db_config");
const sql = "SELECT * FROM favorite_songs WHERE title=?";
songTitle = "Umbrella";
db.get(sql, [songTitle], (err, row) => {
if (err) throw err;
if (row) {
// cetak isi row
console.log(`[${row.id}] ${row.artist} - ${row.title}`);
} else {
console.log("Tidak ada data/hasil");
}
});
db.close();
Hasilnya:
Update Data SQLite
Ada kesalahan pada judul lagu yang kita buat. Pada Akon - No Matter
, seharusnya yang benar: Akon - Don't Matter
.
Kita harus mengubahnya.
Caranya?
Caranya sama seperti insert data, tapi SQL-nya berbeda.
Mari kita coba…
Buatlah sebuah file baru dengan nama update.js
, kemudian isi dengan kode berikut:
const db = require("./db_config");
const sql = `UPDATE favorite_songs
SET title="Don't Matter"
WHERE id=?`;
songId = 3;
db.run(sql, [songId], (err) => {
if (!err) console.log("1 record updated");
});
db.close();
Setelah itu coba eksekusi:
Perhatikan kode di atas…
Kita memberikan nilai 3
untuk variabel songId
, karena id dari data yang akan kita edit adalah 3
.
Silakan sesuaikan dengan id
data yang ingin kamu ubah.
Hapus Data SQLite dengan Nodejs
Sama seperti ubah data, penghapusan data juga membutuhkan id
untuk menentukan data mana yang akan dihapus.
Mari kita coba…
Buatlah file baru dengan nama delete.js
, kemudian isi dengan kode berikut:
const db = require("./db_config");
const sql = `DELETE FROM favorite_songs WHERE id=?`;
const songId = 3;
db.run(sql, [songId], (err) => {
if (!err) console.log("Data deleted");
});
db.close();
Hasilnya:
Pada contoh di atas, kita menghapus data yang ber-id
3
, yaitu: Rihanna - Umbrella
.
Lalu… Bagaimana caranya menghapus semua data dari tabel?
Caranya gampang.
Tinggal hapus WHERE
pada SQL, maka semua data pada tabel akan terhapus.
Contoh: delete_all.js
const db = require("./db_config");
const sql = `DELETE FROM favorite_songs`;
db.run(sql, (err) => {
if (!err) console.log("All data deleted");
});
db.close();
Maka hasilnya:
No comments:
Post a Comment