Logo
© 2019 - 2026 SantriKoding.

On This Page

Mobile navigation

Belajar Bun Dasar #9: Menggunakan Database di Bun

like emoticon 1
love emoticon 1
insightful emoticon 2
fire emoticon 2
cheer emoticon 1
celebrate emoticon 1
Belajar Bun Dasar #9: Menggunakan Database di Bun

Halo teman-teman semuanya, pada pembahasan sebelumnya kita telah belajar bagaimana membaca dan menulis file menggunakan API bawaan Bun seperti Bun.file() dan Bun.write(). Kali ini kita akan masuk ke tahap yang lebih penting dalam pengembangan aplikasi backend, yaitu menghubungkan Bun dengan Database.

Bun sudah menyediakan dukungan bawaan untuk SQLite, dan juga dapat digunakan bersama database populer seperti MySQL, PostgreSQL, atau MongoDB melalui paket dari npm. Dengan ini, kita bisa membangun aplikasi yang dinamis dan menyimpan data secara permanen di database.

Menggunakan SQLite dengan Bun (Built-in)

Bun sudah memiliki modul bun:sqlite bawaan, sehingga kita tidak perlu menginstal library tambahan apa pun untuk menggunakan SQLite.

Buat file baru bernama sqlite.js, lalu masukkan kode berikut:

import { Database } from "bun:sqlite";

// Membuat atau membuka database
const db = new Database("data.db");

// Membuat tabel jika belum ada
db.run(`
  CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
  )
`);

// Menambahkan data baru
db.run("INSERT INTO users (name, email) VALUES (?, ?)", [
  "Fika Ridaul",
  "fika@santrikoding.com",
]);

// Membaca semua data
const users = db.query("SELECT * FROM users").all();
console.log(users);

Jalankan:

bun run sqlite.js

Output:

[ { id: 1, name: "Fika Ridaul", email: "fika@santrikoding.com" } ]

Setiap kali kita menjalankan perintah INSERT, data akan disimpan ke file data.db di folder proyek.

Menggunakan Prepared Statement

Bun SQLite juga mendukung prepared statement untuk efisiensi dan keamanan (menghindari SQL injection).

Contoh:

import { Database } from "bun:sqlite";

const db = new Database("data.db");

const insertUser = db.prepare(
  "INSERT INTO users (name, email) VALUES ($name, $email)"
);

insertUser.run({
  $name: "Santri Koding",
  $email: "halo@santrikoding.com",
});

const selectUser = db.prepare("SELECT * FROM users WHERE email = ?");
const user = selectUser.get("halo@santrikoding.com");

console.log(user);

Output:

{ id: 2, name: "Santri Koding", email: "halo@santrikoding.com" }

Dengan prepared statement, query dijalankan lebih cepat karena tidak perlu diparsing ulang setiap kali.

Menggunakan MySQL dengan Bun

Untuk database eksternal seperti MySQL, kita bisa menggunakan library mysql2 yang kompatibel dengan Bun.

Instal dependensi terlebih dahulu:

bun add mysql2

Lalu buat file mysql.js:

import mysql from "mysql2/promise";

const db = await mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "bun_app",
});

await db.query(`
  CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
  )
`);

await db.query("INSERT INTO users (name, email) VALUES (?, ?)", [
  "Santri Koding",
  "halo@santrikoding.com",
]);

const [rows] = await db.query("SELECT * FROM users");
console.log(rows);

Jalankan:

bun run mysql.js

Output:

[ { id: 1, name: 'Santri Koding', email: 'halo@santrikoding.com' } ]

Bun dapat menjalankan library mysql2 secara native karena kompatibel penuh dengan ekosistem Node.js.

Menggunakan PostgreSQL (Opsional)

Untuk PostgreSQL, kita bisa memakai library pg:

bun add pg

Contoh penggunaan:

import pkg from "pg";
const { Client } = pkg;

const client = new Client({
  host: "localhost",
  user: "postgres",
  password: "12345",
  database: "bun_app",
});

await client.connect();

await client.query(`
  CREATE TABLE IF NOT EXISTS products (
    id SERIAL PRIMARY KEY,
    name TEXT,
    price INTEGER
  )
`);

await client.query("INSERT INTO products (name, price) VALUES ($1, $2)", [
  "Laptop",
  12000000,
]);

const result = await client.query("SELECT * FROM products");
console.log(result.rows);

await client.end();

Output:

[ { id: 1, name: 'Laptop', price: 12000000 } ]

Menggabungkan Bun Server dengan Database

Kita bisa mengintegrasikan database dengan server Bun untuk membuat REST API sederhana.

server.js

import { Database } from "bun:sqlite";

const db = new Database("data.db");

db.run(`
  CREATE TABLE IF NOT EXISTS notes (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    content TEXT
  )
`);

Bun.serve({
  port: 3000,
  async fetch(req) {
    const url = new URL(req.url);

    if (url.pathname === "/notes" && req.method === "GET") {
      const notes = db.query("SELECT * FROM notes").all();
      return Response.json(notes);
    }

    if (url.pathname === "/notes" && req.method === "POST") {
      const data = await req.json();
      db.run("INSERT INTO notes (title, content) VALUES (?, ?)", [
        data.title,
        data.content,
      ]);
      return new Response("Note berhasil disimpan!");
    }

    return new Response("404 - Endpoint tidak ditemukan", { status: 404 });
  },
});

Jalankan server:

bun run server.js

Lalu akses:

  • GET http://localhost:3000/notes → menampilkan daftar catatan

  • POST http://localhost:3000/notes dengan body JSON:

    { "title": "Catatan 1", "content": "Belajar Bun Database" }
    

Kesimpulan

Bun mendukung integrasi database dengan sangat baik, baik menggunakan SQLite bawaan maupun database populer seperti MySQL dan PostgreSQL.

Dengan API yang ringan dan kompatibilitas penuh terhadap ekosistem Node.js, Bun memudahkan kita untuk membangun aplikasi yang cepat, efisien, dan mudah dikembangkan.

Terima Kasih

Artikel ini dibaca sebanyak 1.404 kali

Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CEO & Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komentar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

Memuat komentar...