tediousを使用したDB接続実装サンプル
〇サンプルに使用するテーブル
CREATE TABLE shopping_items ( id bigint IDENTITY(1,1) NOT NULL, name varchar(40) COLLATE Japanese_CI_AS NOT NULL, price int NOT NULL, suryo int NULL, description varchar(100) COLLATE Japanese_CI_AS NULL, version int NOT NULL, CONSTRAINT shopping_items_pk PRIMARY KEY (id) );
tediousのインストール
npm install tedious
〇package.json
{ "name": "aa", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "tedious": "^14.5.0", "typescript": "^4.7.3" } }
接続先の設定
import {Connection, TYPES, Request} from 'tedious'; var config = { server: 'localhost', authentication: { type: 'default', options: { userName: 'aa00001', password: 'Xaa00001' } }, options: { port: 1433, database: 'Test' } };
コネクションの確立
connection.connect()
メソッドでコネクションを確立する。
// コネクションの確立 const connection = new Connection(config); // コネクション確立時の処理を記述する connection.on('connect', (error) => { if(!error){ console.log('connected!'); executeStatement(); } }) connection.connect();
DB操作処理の記述
function executeStatement() { // SELECTサンプル request = new Request('SELECT * FROM shopping_items', (error) => { if(error) { console.log(error); } }); // 検索結果の処理サンプル request.on('row', (columns) => { columns.forEach(column => { if(column.value !== null){ console.log(column.value); } }); }); // INSERTサンプル // バインド変数サンプル const request = new Request("INSERT INTO shopping_items (item_name, item_price, item_suryo, item_description, version) VALUES(@itemName, @itemPrice, @itemSuryo, @itemDescription, 1)", (error) => { if(error) { console.log(error); } createTransaction(); }); request.addParameter('itemName', TYPES.NVarChar, 'タルト'); request.addParameter('itemPrice', TYPES.Int, 580); request.addParameter('itemSuryo', TYPES.Int, 5); request.addParameter('itemDescription', TYPES.NVarChar, '美味しい'); // クエリ実行 connection.execSql(request); }
トランザクション処理
// トランザクションサンプル function createTransaction(){ connection.beginTransaction(error => { if(error){ rollback(); } else { commit(); } }); } // コミットサンプル function commit() { connection.commitTransaction(error => { if (error) { console.log(error); } console.log('commit!'); connection.close(); }) } // ロールバックサンプル function rollback() { connection.rollbackTransaction(error => { if(error) { console.log(error); } console.log('rollback!'); connection.close(); }) }
〇index.tsの全体
import {Connection, TYPES, Request} from 'tedious'; // 接続先の設定 var config = { server: 'localhost', authentication: { type: 'default', options: { userName: 'aa00001', password: 'Xaa00001' } }, options: { port: 1433, database: 'Test' } }; // コネクションの確立 const connection = new Connection(config); connection.on('connect', (error) => { if(!error){ console.log('connected!'); executeStatement(); } }) connection.connect(); function executeStatement() { // SELECTサンプル request = new Request('SELECT * FROM shopping_items', (error) => { if(error) { console.log(error); } }); // 検索結果の処理サンプル request.on('row', (columns) => { columns.forEach(column => { if(column.value !== null){ console.log(column.value); } }); }); // INSERTサンプル // バインド変数サンプル const request = new Request("INSERT INTO shopping_items (item_name, item_price, item_suryo, item_description, version) VALUES(@itemName, @itemPrice, @itemSuryo, @itemDescription, 1)", (error) => { if(error) { console.log(error); } createTransaction(); }); request.addParameter('itemName', TYPES.NVarChar, 'タルト'); request.addParameter('itemPrice', TYPES.Int, 580); request.addParameter('itemSuryo', TYPES.Int, 5); request.addParameter('itemDescription', TYPES.NVarChar, '美味しい'); // クエリ実行 connection.execSql(request); } // トランザクションサンプル function createTransaction(){ connection.beginTransaction(error => { if(error){ rollback(); } else { commit(); } }); } // コミット処理サンプル function commit() { connection.commitTransaction(error => { if (error) { console.log(error); } console.log('commit!'); connection.close(); }) } // ロールバック処理サンプル function rollback() { connection.rollbackTransaction(error => { if(error) { console.log(error); } console.log('rollback!'); connection.close(); }) }