Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sqlite3 from 'sqlite3'
- class SQL {
- /**
- * Inisialisasi instance SQL baru.
- * @param {string} databasePath - Path ke file database SQLite.
- */
- constructor(databasePath) {
- this.databasePath = databasePath
- this.db = new sqlite3.Database(this.databasePath, (err) => {
- if (err) {
- console.error('Kesalahan membuka database:', err.message)
- } else {
- console.log('Terhubung ke database SQLite.')
- }
- })
- }
- /**
- * Membuat tabel baru dalam database jika belum ada.
- * @param {string} tableName - Nama tabel.
- * @param {Array<{name: string, type: string}>} columns - Definisi kolom tabel.
- */
- async createTable(tableName, columns) {
- try {
- const tableExistsQuery = `SELECT name FROM sqlite_master WHERE type='table' AND name=?`
- const tableExists = await new Promise((resolve, reject) => {
- this.db.get(tableExistsQuery, [tableName], (err, row) => {
- if (err) reject(err)
- resolve(!!row)
- })
- })
- if (tableExists) return
- const columnsDef = columns.map(col => `${col.name} ${col.type}`).join(', ')
- const query = `CREATE TABLE ${tableName} (${columnsDef})`
- await new Promise((resolve, reject) => {
- this.db.run(query, (err) => {
- if (err) reject(err)
- resolve()
- })
- })
- } catch (error) {
- console.error(`Kesalahan membuat tabel "${tableName}":`, error.message)
- }
- }
- /**
- * Menambahkan data ke tabel.
- * @param {string} tableName - Nama tabel.
- * @param {Object} data - Objek data (key-value) untuk dimasukkan.
- */
- async insert(tableName, data) {
- try {
- const columns = Object.keys(data).join(', ')
- const placeholders = Object.keys(data).map(() => '?').join(', ')
- const values = Object.values(data)
- const sql = `INSERT INTO ${tableName} (${columns}) VALUES (${placeholders})`
- await this.run(sql, values)
- } catch (error) {
- console.error('Kesalahan saat menambahkan data:', error.message)
- }
- }
- /**
- * Mengambil data dari tabel berdasarkan kondisi tertentu.
- * @param {string} tableName - Nama tabel.
- * @param {string|string[]} columns - Kolom yang ingin diambil, atau '*' untuk semua kolom.
- * @param {string} [condition] - Kondisi SQL untuk filter data.
- * @returns {Promise<Array>} - Array baris data yang sesuai.
- */
- async select(tableName, columns = '*', condition = '') {
- try {
- const sql = `SELECT ${columns} FROM ${tableName} ${condition ? `WHERE ${condition}` : ''}`
- return await this.all(sql)
- } catch (error) {
- console.error('Kesalahan saat mengambil data:', error.message)
- }
- }
- /**
- * Memperbarui data dalam tabel berdasarkan kondisi tertentu.
- * @param {string} tableName - Nama tabel.
- * @param {Object} data - Objek data (key-value) untuk diperbarui.
- * @param {string} condition - Kondisi SQL untuk filter data.
- */
- async update(tableName, data, condition) {
- try {
- const setClause = Object.keys(data).map((key) => `${key} = ?`).join(', ')
- const values = Object.values(data)
- const sql = `UPDATE ${tableName} SET ${setClause} WHERE ${condition}`
- await this.run(sql, values)
- } catch (error) {
- console.error('Kesalahan saat memperbarui data:', error.message)
- }
- }
- /**
- * Menghapus data dari tabel berdasarkan kondisi tertentu.
- * @param {string} tableName - Nama tabel.
- * @param {string} condition - Kondisi SQL untuk filter data.
- * @param {Array} conditionValues - Nilai-nilai untuk kondisi.
- */
- async delete(tableName, condition, conditionValues = []) {
- try {
- const query = `DELETE FROM ${tableName} WHERE ${condition}`
- await this.run(query, conditionValues)
- } catch (error) {
- console.error(`Kesalahan saat menghapus data dari tabel "${tableName}":`, error.message)
- }
- }
- /**
- * Mengambil semua data dari tabel.
- * @param {string} tableName - Nama tabel.
- * @returns {Promise<Array>} - Array baris data dalam tabel.
- */
- async fetch(tableName) {
- try {
- const query = `SELECT * FROM ${tableName}`
- return await this.all(query)
- } catch (error) {
- console.error(`Kesalahan saat mengambil data dari tabel "${tableName}":`, error.message)
- }
- }
- /**
- * Menghapus tabel jika tabel tersebut ada.
- * @param {string} tableName - Nama tabel.
- */
- async dropTable(tableName) {
- try {
- const sql = `DROP TABLE IF EXISTS ${tableName}`
- await this.run(sql)
- } catch (error) {
- console.error('Kesalahan saat menghapus tabel:', error.message)
- }
- }
- /**
- * Mengambil informasi kolom dari tabel.
- * @param {string} tableName - Nama tabel.
- * @returns {Promise<Array>} - Array informasi kolom tabel.
- */
- async getAll(tableName) {
- try {
- const query = `PRAGMA table_info(${tableName})`
- return await this.all(query)
- } catch (error) {
- console.error(`Kesalahan mengambil informasi kolom tabel "${tableName}":`, error.message)
- }
- }
- /**
- * Menutup koneksi ke database.
- * @returns {Promise<void>}
- */
- close() {
- return new Promise((resolve, reject) => {
- this.db.close((err) => {
- if (err) {
- console.error('Kesalahan saat menutup database:', err.message)
- reject(err)
- } else {
- console.log('Koneksi database ditutup.')
- resolve()
- }
- })
- })
- }
- /**
- * Menjalankan query SQL yang tidak mengembalikan baris data.
- * @param {string} sql - String query SQL.
- * @param {Array} params - Parameter query.
- * @returns {Promise<any>}
- */
- run(sql, params = []) {
- return new Promise((resolve, reject) => {
- this.db.run(sql, params, function (err) {
- if (err) reject(err)
- else resolve(this)
- })
- })
- }
- /**
- * Menjalankan query SQL yang mengembalikan beberapa baris data.
- * @param {string} sql - String query SQL.
- * @param {Array} params - Parameter query.
- * @returns {Promise<Array>} - Array baris data.
- */
- all(sql, params = []) {
- return new Promise((resolve, reject) => {
- this.db.all(sql, params, (err, rows) => {
- if (err) reject(err)
- else resolve(rows)
- })
- })
- }
- }
- export default SQL
- // Path: open-api/.misc/sql.js
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement