Módulo para trabajar con sqlite3

Hoy me gustaría compartir mi pequeño desarrollo, que me viene ayudando desde hace más de medio año: "Módulo para trabajar con sqlite3".





Concepto

En lugar de escribir consultas SQL, pasaremos claves, valores, nombres de tablas, condiciones y devoluciones de llamada que serán invocadas al completar las consultas (pasaremos un error y el resultado, si lo hay, a cada devolución de llamada).





Representemos el módulo como una clase.





Habrá 4 métodos en total:





  1. getData (): para obtener datos de la tabla.





  2. insertData (): para agregar datos a la tabla.





  3. updateData (): para actualizar los datos de la tabla.





  4. deleteData (): para eliminar datos de la tabla.





Por supuesto, con la ayuda de los 4 métodos anteriores, no podremos excluir todo tipo de solicitudes, pero en mi caso, estas solicitudes son las más frecuentes.





Código

Para empezar, crearemos la clase en sí, configuraremos la exportación y nos conectaremos a la base de datos y crearemos un método que agregará comillas al elemento si el tipo de elemento coincide con el tipo de cadena.





class DataBase {

    /**
     * 
     * @readonly
     */
    static sqlite3 = require('sqlite3').verbose();
    
    /**
    * 
    * @readonly
    */
   static database = new this.sqlite3.Database('./database/database.db');

    static ToString(value) {
        return typeof(value) === 'string' ? '\'' + value + '\'' : value;
    }
}

module.exports = {
    database: DataBase
};
      
      



Para empezar, escribiremos un método que devolverá datos de la tabla, no necesariamente, pero tendremos en cuenta la cantidad de filas que nos serán devueltas (una o más).





"SELECT", , , , "*" "" , , . . , - , .





class DataBase {

    /**
     * 
     * @readonly
     */
    static sqlite3 = require('sqlite3').verbose();
    
    /**
    * 
    * @readonly
    */
   static database = new this.sqlite3.Database('./database/database.db');
    
    /**
     * 
     * @param {String[]} keys 
     * @param {String} table 
     * @param {String} condition 
     * @param {Boolean} some 
     * @param {Function()} callback 
     */
    static getData(keys, table, condition = '', some = true, callback = () => {}) {
        let sql = 'SELECT ';
        for (let i = 0; i < keys.length; i++) {
            sql += keys[i] === '*' ? keys[i] : '`' + keys[i] + '`';
            if (keys.length > i + 1)
                sql += ', ';
        }
        sql += ' FROM `' + table + '` ' + condition;
        
        if (some)
            this.database.all(sql, (err, rows) => {
                callback(err, rows);
            });
        else
            this.database.get(sql, (err, row) => {
                callback(err, row);
            });
    };

    static ToString(value) {
        return typeof(value) === 'string' ? '\'' + value + '\'' : value;
    }
}

module.exports = {
    database: DataBase
};
      
      



.





, , .





class DataBase {

    /**
     * 
     * @readonly
     */
    static sqlite3 = require('sqlite3').verbose();
    
    /**
    * 
    * @readonly
    */
   static database = new this.sqlite3.Database('./database/database.db');
    
    /**
     * 
     * @param {String[]} keys 
     * @param {String} table 
     * @param {String} condition 
     * @param {Boolean} some 
     * @param {Function()} callback 
     */
    static getData(keys, table, condition = '', some = true, callback = () => {}) {
        let sql = 'SELECT ';
        for (let i = 0; i < keys.length; i++) {
            sql += keys[i] === '*' ? keys[i] : '`' + keys[i] + '`';
            if (keys.length > i + 1)
                sql += ', ';
        }
        sql += ' FROM `' + table + '` ' + condition;
        
        if (some)
            this.database.all(sql, (err, rows) => {
                callback(err, rows);
            });
        else
            this.database.get(sql, (err, row) => {
                callback(err, row);
            });
    };
    
    /**
     * 
     * @param {String[]} keys 
     * @param {Values[]} values 
     * @param {String} table 
     * @param {String} condition 
     * @param {Function()} callback 
     */
    static updateData(keys, values, table, condition, callback = () => {}) {
        let sql = 'UPDATE `' + table + '` SET ';
        for (let i = 0; i < keys.length; i++) {
            sql += '`' + keys[i] + '` = ' + this.ToString(values[i]);
            if (keys.length > i + 1)
                sql += ', ';
        }
        sql += ' ' + condition;
        
        this.database.run(sql, (err) => {
            callback(err);
        });
    }

    static ToString(value) {
        return typeof(value) === 'string' ? '\'' + value + '\'' : value;
    }
}

module.exports = {
    database: DataBase
};
      
      



-, ( ) .





Comenzamos agregando datos especificando la tabla, luego pasamos todas las claves que queremos configurar y terminamos configurando todos los valores (el valor debe tener el mismo índice que la clave que necesita establecer este valor).





class DataBase {

    /**
     * 
     * @readonly
     */
    static sqlite3 = require('sqlite3').verbose();
    
    /**
    * 
    * @readonly
    */
   static database = new this.sqlite3.Database('./database/database.db');
    
    /**
     * 
     * @param {String[]} keys 
     * @param {String} table 
     * @param {String} condition 
     * @param {Boolean} some 
     * @param {Function()} callback 
     */
    static getData(keys, table, condition = '', some = true, callback = () => {}) {
        let sql = 'SELECT ';
        for (let i = 0; i < keys.length; i++) {
            sql += keys[i] === '*' ? keys[i] : '`' + keys[i] + '`';
            if (keys.length > i + 1)
                sql += ', ';
        }
        sql += ' FROM `' + table + '` ' + condition;
        
        if (some)
            this.database.all(sql, (err, rows) => {
                callback(err, rows);
            });
        else
            this.database.get(sql, (err, row) => {
                callback(err, row);
            });
    };
    
    /**
     * 
     * @param {String[]} keys 
     * @param {Values[]} values 
     * @param {String} table 
     * @param {String} condition 
     * @param {Function()} callback 
     */
    static updateData(keys, values, table, condition, callback = () => {}) {
        let sql = 'UPDATE `' + table + '` SET ';
        for (let i = 0; i < keys.length; i++) {
            sql += '`' + keys[i] + '` = ' + this.ToString(values[i]);
            if (keys.length > i + 1)
                sql += ', ';
        }
        sql += ' ' + condition;
        
        this.database.run(sql, (err) => {
            callback(err);
        });
    }
    
    /**
     * @param {String[]} keys
     * @param {String[]} values
     * @param {String} table 
     * @param {Function()} callback 
     */
    static insertData(keys, values, table, callback = () => {}) {
        let sql = 'INSERT INTO `' + table + '` (';
        for (let i = 0; i < keys.length; i++) {
            sql += '`' + keys[i] + '`';
            if (keys.length > i + 1)
                sql += ', ';
        }
        sql += ') VALUES (';
        for (let i = 0; i < values.length; i++) {
            sql += this.ToString(values[i]);
            if (values.length > i + 1)
                sql += ', ';
        }
        sql += ')';

        this.database.run(sql, (err) => {
            callback(err);
        });
    };

    /**
     * 
     * @param {String} table 
     * @param {String} condition 
     * @param {Function()} callback 
     */
    static deleteData(table, condition = '', callback = () => {}) {
        this.database.run('DELETE FROM `' + table + '` ' + condition, (err) => {
            callback(err);
        });
    }

    static ToString(value) {
        return typeof(value) === 'string' ? '\'' + value + '\'' : value;
    }
}

module.exports = {
    database: DataBase
};
      
      



Eso es todo, ¡gracias por tu atención!

Proyecto en GitHub








All Articles