今日は、半年以上私を助けてきた私の小さな開発「sqlite3を操作するためのモジュール」を共有したいと思います。
概念
SQLクエリを作成する代わりに、クエリの完了時に呼び出されるキー、値、テーブル名、条件、およびコールバックを渡します(エラーと結果がある場合は、各コールバックに渡します)。
モジュールをクラスとして表現しましょう。
全部で4つの方法があります:
getData()-テーブルからデータを取得します。
insertData()-テーブルにデータを追加します。
updateData()-テーブル内のデータを更新します。
deleteData()-テーブルからデータを削除します。
もちろん、上記の4つの方法を使用すると、すべてのタイプのリクエストを除外することはできませんが、私の場合、これらのリクエストが最も頻繁に発生します。
コード
まず、クラス自体を作成し、エクスポートを設定してデータベースに接続し、要素タイプが文字列タイプと一致する場合に要素に引用符を追加するメソッドを作成します。
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
};
まず、テーブルからデータを返すメソッドを作成しますが、必ずしもそうとは限りませんが、返される行数(1つ以上)を考慮に入れます。
"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
};
-, ( ) .
テーブルを指定してデータを追加し、設定するすべてのキーを渡し、最後にすべての値を設定します(値は、この値を設定する必要があるキーと同じインデックスを持っている必要があります)。
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
};
以上、ご清聴ありがとうございました!
GitHubのプロジェクト