Heute möchte ich meine kleine Entwicklung teilen, die mir seit mehr als einem halben Jahr hilft: "Modul für die Arbeit mit sqlite3".
Konzept
Anstatt SQL-Abfragen zu schreiben, übergeben wir Schlüssel, Werte, Tabellennamen, Bedingungen und Rückrufe, die nach Abschluss der Abfragen aufgerufen werden (wir geben einen Fehler und gegebenenfalls ein Ergebnis an jeden Rückruf weiter).
Stellen wir das Modul als Klasse dar.
Insgesamt gibt es 4 Methoden:
getData () - um Daten aus der Tabelle abzurufen.
insertData () - um Daten zur Tabelle hinzuzufügen.
updateData () - um die Daten in der Tabelle zu aktualisieren.
deleteData () - um Daten aus der Tabelle zu löschen.
Natürlich können wir mit Hilfe der oben genannten 4 Methoden nicht alle Arten von Anfragen ausschließen, aber in meinem Fall sind diese Anfragen am häufigsten.
Code
Zunächst erstellen wir die Klasse selbst, richten den Export ein, stellen eine Verbindung zur Datenbank her und erstellen eine Methode, die dem Element Anführungszeichen hinzufügt, wenn der Elementtyp mit dem Zeichenfolgentyp übereinstimmt.
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
};
Zunächst schreiben wir eine Methode, die nicht unbedingt Daten aus der Tabelle zurückgibt, sondern die Anzahl der Zeilen berücksichtigt, die an uns zurückgegeben werden (eine oder mehrere).
"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
};
-, ( ) .
Wir beginnen mit dem Hinzufügen von Daten, indem wir die Tabelle angeben, dann alle Schlüssel festlegen, die wir festlegen möchten, und mit dem Festlegen aller Werte enden (der Wert muss denselben Index haben wie der Schlüssel , der diesen Wert festlegen muss).
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
};
Das ist alles, danke für Ihre Aufmerksamkeit!
Projekt auf GitHub