Files
web-antrean/ACCESS_DATABASE.md
2026-01-05 08:32:59 +07:00

6.0 KiB

Cara Mengakses Database better-sqlite3

📍 Lokasi Database

  • Path relatif: data/users.db
  • Path lengkap: E:\PROJECT\ddddd\Web-Antrean - Copy (2)\data\users.db

Karena project ini sudah menggunakan better-sqlite3, cara termudah adalah membuat script Node.js:

Contoh Script untuk Query Database

// scripts/query-db.js
const Database = require('better-sqlite3');
const path = require('path');

const dbPath = path.join(__dirname, '..', 'data', 'users.db');
const db = new Database(dbPath);

// Contoh: Get all users
const users = db.prepare('SELECT * FROM users').all();
console.log('All users:', users);

// Contoh: Get user by ID
const user = db.prepare('SELECT * FROM users WHERE id = ?').get('user-id-here');
console.log('User:', user);

// Contoh: Count users
const count = db.prepare('SELECT COUNT(*) as total FROM users').get();
console.log('Total users:', count.total);

db.close();

Jalankan dengan:

node scripts/query-db.js

🔧 Metode 2: Menggunakan SQLite CLI

Install SQLite CLI (jika belum ada)

Windows:

  1. Download dari: https://www.sqlite.org/download.html
  2. Atau install via Chocolatey: choco install sqlite
  3. Atau install via Scoop: scoop install sqlite

Atau gunakan npx (tidak perlu install):

npx sqlite3 data/users.db

Perintah SQLite CLI

# Buka database
sqlite3 data/users.db

# Atau dengan npx (jika SQLite tidak terinstall)
npx sqlite3 data/users.db

# Di dalam SQLite shell:
.tables                    # Lihat semua tabel
.schema users              # Lihat schema tabel users
SELECT * FROM users;        # Lihat semua data
SELECT * FROM users LIMIT 10;  # Lihat 10 baris pertama
.mode column               # Format output sebagai kolom
.headers on                # Tampilkan header kolom
.quit                      # Keluar

🔧 Metode 3: Menggunakan GUI Tools

2. SQLiteStudio (Gratis)

3. DBeaver (Gratis)

  • Download: https://dbeaver.io/
  • Universal database tool, support banyak database termasuk SQLite

4. VS Code Extension

  • Install extension: SQLite Viewer atau SQLite
  • Buka file data/users.db langsung di VS Code

🔧 Metode 4: Menggunakan API Endpoints yang Sudah Ada

Project ini sudah punya API endpoints untuk mengakses data:

# Get all users
GET /api/users/list

# Get current user
GET /api/users/current

# Get user by ID
GET /api/users/[id]

# Create user
POST /api/users/create

# Update user
PATCH /api/users/[id]

# Delete user
DELETE /api/users/[id]

📊 Contoh Query Berguna

Melihat semua users:

SELECT * FROM users;

Melihat users dengan format tanggal yang readable:

SELECT 
  id,
  namaLengkap,
  namaUser,
  email,
  datetime(lastLogin, 'unixepoch') as lastLoginFormatted,
  datetime(createdAt, 'unixepoch') as createdAtFormatted
FROM users;

Mencari user berdasarkan nama:

SELECT * FROM users WHERE namaLengkap LIKE '%nama%';

Mencari user berdasarkan username:

SELECT * FROM users WHERE namaUser = 'username';

Melihat users yang belum login:

SELECT * FROM users WHERE lastLogin IS NULL;

Melihat users yang baru dibuat:

SELECT * FROM users ORDER BY createdAt DESC LIMIT 10;

Export data ke CSV:

.mode csv
.headers on
.output users_export.csv
SELECT * FROM users;
.output stdout

⚠️ Catatan Penting

  1. Backup sebelum edit manual: Selalu backup database sebelum melakukan perubahan manual
  2. Tutup koneksi: Pastikan aplikasi tidak sedang menggunakan database saat mengedit manual
  3. Format timestamps: lastLogin, createdAt, updatedAt disimpan sebagai Unix timestamp (seconds)
  4. JSON fields: roles, realmRoles, accountRoles, resourceRoles, groups disimpan sebagai JSON string

🛠️ Quick Access Script

Buat file scripts/db-access.js untuk akses cepat:

const Database = require('better-sqlite3');
const path = require('path');
const readline = require('readline');

const dbPath = path.join(process.cwd(), 'data', 'users.db');
const db = new Database(dbPath);

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

console.log('📊 Database Access Tool');
console.log('Database path:', dbPath);
console.log('\nAvailable commands:');
console.log('  list - List all users');
console.log('  count - Count total users');
console.log('  schema - Show table schema');
console.log('  query <SQL> - Run custom SQL query');
console.log('  exit - Exit\n');

function prompt() {
  rl.question('> ', (input) => {
    const [cmd, ...args] = input.trim().split(' ');
    
    try {
      switch(cmd.toLowerCase()) {
        case 'list':
          const users = db.prepare('SELECT id, namaLengkap, namaUser, email FROM users').all();
          console.table(users);
          break;
        case 'count':
          const count = db.prepare('SELECT COUNT(*) as total FROM users').get();
          console.log(`Total users: ${count.total}`);
          break;
        case 'schema':
          const schema = db.prepare("PRAGMA table_info(users)").all();
          console.table(schema);
          break;
        case 'query':
          const sql = args.join(' ');
          if (!sql) {
            console.log('Error: Please provide SQL query');
            break;
          }
          const result = db.prepare(sql).all();
          console.table(result);
          break;
        case 'exit':
          db.close();
          rl.close();
          return;
        default:
          console.log('Unknown command. Type "exit" to quit.');
      }
    } catch (error) {
      console.error('Error:', error.message);
    }
    
    prompt();
  });
}

prompt();

Jalankan dengan: node scripts/db-access.js