プログラム 技術

JavaScritptからSQLにアクセスする

前回に引き続き今回はJavaScriptでSQLサーバーに対してExpressを用いての方法となります。前回同様、Expressに対してはPostmanを使用しています

名称バージョン
NodeJS20.12.2
npm10.5.0
Express4.21.1
mssql11.0.1
前回の記事
JavaScritptからMySQLにアクセスする - ナストンのまとめ
JavaScritptからMySQLにアクセスする - ナストンのまとめ

これまでPythonやC#でデータベース(MySQLやSQL)に対してアクセスしたり、データ取得したりデータ登録したりし ...

対象記事へ

テーブルの作成

基本的には前回のPythonと同様にSQLコマンドを実行して作成する感じとなっています

const express = require('express');
const sql = require('mssql');

const app = express();
const port = 3000;

const tableName = 'TestTableNode';

// SQLサーバーの設定
const config = {
    user: 'ユーザー名',
    password: 'userのパスワード',
    database: '対象DB名'
    options: {
        encrypt: true, // 必要に応じて暗号化を使用する
        trustServerCertificate: true // ローカル・デベロッパー/自己署名証明書についてはtrueに変更する
    }
};

// SQLサーバーに接続
sql.connect(config, (err) => {
    if (err) {
        console.error('Database connection error: ' + err.stack);
        return;
    }
    console.log('Connected to the database');
});

// テーブル作成
app.get('/createTable', async (req, res) => {
    const createTableQuery = `
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[${tableName}]') AND type in (N'U'))
BEGIN

CREATE TABLE ${tableName} (
            id INT IDENTITY(1,1) PRIMARY KEY,
            name NVARCHAR(255) NOT NULL,
            age INT NOT NULL
         )

END
    `;
    try {
        await sql.query(createTableQuery);
        res.send('テーブルが作成されました');
    } catch (err) {
        console.error('テーブル作成エラー: ' + err.stack);
        res.status(500).send('テーブル作成エラー');
    }
});

app.listen(port, () => {
    console.log(`サーバーがポート${port}で起動しました`);
});

上記を実行し、そのURLにPostmanでアクセスするとテーブルが作成されています(今回はデータベース名を『TestDB』としています)

テーブルにデータを登録する

先ほど作成したテーブルに今度は実際にデータを登録してみます

const express = require('express');
const sql = require('mssql');

const app = express();
app.use(express.json()); // 追加
const port = 3000;

const tableName = 'TestTableNode';

// SQLサーバーの設定
const config = {
    user: 'ユーザー名',
    password: 'userのパスワード',
    database: '対象DB名'
    options: {
        encrypt: true, // 必要に応じて暗号化を使用する
        trustServerCertificate: true // ローカル・デベロッパー/自己署名証明書についてはtrueに変更する
    }
};

// SQLサーバーに接続
sql.connect(config, (err) => {
    if (err) {
        console.error('Database connection error: ' + err.stack);
        return;
    }
    console.log('Connected to the database');
});

// データ登録
app.post('/addData', async (req, res) => {
    const { name, age } = req.body;
    const insertQuery = `INSERT INTO ${tableName} (name, age) VALUES (@name, @age)`;
    try {
        const request = new sql.Request();
        request.input('name', sql.NVarChar, name);
        request.input('age', sql.Int, age);
        await request.query(insertQuery);
        res.send('データが登録されました');
    } catch (err) {
        console.error('データ登録エラー: ' + err.stack);
        res.status(500).send('データ登録エラー');
    }
});

app.listen(port, () => {
    console.log(`サーバーがポート${port}で起動しました`);
});

上記を実行し、そのURLにPostmanでアクセスすると対象テーブル上にデータが作成されています

テーブルに登録されているデータを取得する

最後にテーブル上のデータを取得します

const express = require('express');
const sql = require('mssql');

const app = express();
app.use(express.json());
const port = 3000;

const tableName = 'TestTableNode';

// SQLサーバーの設定
const config = {
    user: 'ユーザー名',
    password: 'userのパスワード',
    database: '対象DB名'
    options: {
        encrypt: true, // 必要に応じて暗号化を使用する
        trustServerCertificate: true // ローカル・デベロッパー/自己署名証明書についてはtrueに変更する
    }
};

// SQLサーバーに接続
sql.connect(config, (err) => {
    if (err) {
        console.error('Database connection error: ' + err.stack);
        return;
    }
    console.log('Connected to the database');
});

// データ取得
app.get('/getTabelDate', async (req, res) => {
    try {
        const result = await sql.query(`SELECT * FROM ${tableName}`);
        res.json(result.recordset);
    } catch (err) {
        console.error('Query error: ' + err.stack);
        res.status(500).send('Query error');
    }
});

app.listen(port, () => {
    console.log(`サーバーがポート${port}で起動しました`);
});

上記を実行し、そのURLにPostmanでアクセスすると対象テーブル上のデータを取得できました

最後に

これでJavaScriptからMySQLへの操作ができるようになりました
ただ、Pythonの時と同様に基本的にSQLコマンドを渡して実行してもらう形となっているのである程度の知識が必要となりそうです

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

PR

-プログラム, 技術
-, ,