Módulo para trabalhar com sqlite3

Hoje gostaria de compartilhar meu pequeno desenvolvimento, que me vem ajudando há mais de meio ano: "Módulo para trabalhar com sqlite3".





Conceito

Em vez de escrever consultas SQL, passaremos chaves, valores, nomes de tabelas, condições e retornos de chamada que serão chamados após a conclusão das consultas (passaremos um erro e o resultado, se houver, para cada retorno de chamada).





Vamos representar o módulo como uma classe.





Haverá 4 métodos no total:





  1. getData () - para obter dados da tabela.





  2. insertData () - para adicionar dados à tabela.





  3. updateData () - para atualizar os dados na tabela.





  4. deleteData () - para excluir dados da tabela.





Claro que, com a ajuda dos 4 métodos acima, não poderemos excluir todos os tipos de solicitações, mas, no meu caso, essas solicitações são as mais frequentes.





Código

Para começar, criaremos a própria classe, configuraremos a exportação e conectaremos ao banco de dados e criaremos um método que adicionará aspas ao elemento se o tipo de elemento corresponder ao tipo de string.





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 começar, escreveremos um método que retornará dados da tabela, não necessariamente, mas levaremos em consideração o número de linhas que serão retornadas para nós (uma ou mais).





"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
};
      
      



-, ( ) .





Começamos adicionando dados especificando a tabela, passando todas as chaves que queremos definir e terminando com a definição de todos os valores (o valor deve ter o mesmo índice que a chave que precisa definir 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
};
      
      



Isso é tudo, obrigado pela atenção!

Projeto no GitHub








All Articles