はじめに
typescript+node.jsでMySQLに接続するにはpromise-mysqlを使用します
インストール方法
npmでインストールします
npm install promise-mysql --save
typescriptを使用するので型定義もインストールします
npm install @types/mysql --save
使い方
データベースへの接続
import * as mysql from 'promise-mysql';
const connection = await mysql.createConnection({
host: '[データベースのホスト]',
user: '[ユーザーID]',
password: '[パスワード]',
database: '[データベース名]',
multipleStatements: true
});
multipleStatementsをtrueにすると一度に複数のクエリを実行することができます
クエリの実行
const data = await connection.query('SELECT * FROM `[テーブル名]`');
for (const row of data) {
console.log(row['カラム名']);
}
パラメータを指定する場合は下記のように、第二引数に配列を渡します
const data = await connection.query('SELECT * FROM `[テーブル名]` WHERE ID = ?', [ 1 ]);
for (const row of data.recordset) {
console.log(row['カラム名']);
}
通常はquery関数ごとに1つのクエリしか実行できませんが、接続時にmultipleStatementsをtrueにしておけば複数のクエリを実行することができます
下記の例ではdeleteとupdateを同時に行います
await connection.query('DELETE `[テーブル名]` WHERE ID = ?; UPDATE `[テーブル名]` SET `[カラム名]` = ? WHERE ID = ?', [ 1, 'update_value', 2 ])
終了
await this.connection.end();
クラス例
以上の関数を実装したクラス例です
import * as mysql from 'promise-mysql';
export class Mysql {
private connection: mysql.Connection;
/**
* 接続
* @param host
* @param user
* @param password
* @param database
* @returns {Promise}
*/
public async connect(host: string, user: string, password: string, database: string) {
this.connection = await mysql.createConnection({
host: host,
user: user,
password: password,
database: database,
multipleStatements: true
});
}
/**
* クエリ実行
* @param query
* @param parameters
* @returns {Promise}
*/
public async query(query: string, parameters: any[] = []) {
return (await this.connection.query(query, parameters));
}
/**
* 終了
* @returns {Promise}
*/
public async end() {
await this.connection.end();
}
}