no versions found for ApplicationFrameworkReferences / Utility/Database/index / en

データベースの操作を行うクライアントのラッパーを提供します。

データベース

モジュール一覧


概要


Alierフレームワークでは、データベースを操作するためのクラスとして、以下のクラスを提供しています:

  • AlierDB クラス

    データベースとの接続を管理するクラスです。

    データベースのテーブルに対する操作は、AlierDB のインスタンスから生成される、AlierTable クラスのインスタンスを通じて行います。

    詳細は AlierDB モジュールの解説を参照してください

  • AlierTable クラス

    データベースの特定のテーブルを操作するための機能を提供するクラスです。

    テーブルに関する以下の操作を提供します。

    • データの取得
    • データの追加
    • データの更新
    • データの削除
    • 他のテーブルとの結合

    AlierTable のインスタンスは、AlierDB を介して生成されます。 AlierTable はまた、すべてのテーブル操作を AlierDB を介して実行します(AlierDB はまた DBConnector の実装を介してそれをデータベースクライアントに伝えます)。

    詳細は AlierDB モジュールの解説を参照してください

これらのクラスを利用する場合とSQLを直接利用する場合とで異なる点は、データベースのテーブルをオブジェクトとして抽象化していることです。 データベース上に存在する物理テーブルや SELECT 文や JOIN 演算によって作られる仮想テーブルをオブジェクトとして扱うことには次の利益があります:

  • テーブル操作を行うインターフェースを共通化できます
  • SQL文の実行から離れてテーブルの結合や副クエリの生成を行えます
  • 操作の対象となるテーブルを明確にできます

データベースの利用

モバイル版とNode.js版では、AlierDB の初期化方法が異なります。 大きな違いは、コンストラクタ引数として渡す値と、データベース定義の設定方法です。

モバイル版ではコンストラクタ引数として、データベース名 database とバージョン version を指定します。 また、データベース定義の設定は AlierDB.createDatabase() の中で行われます。

Node.js版ではコンストラクタ引数として、データベース名 database とデータベース種別 databaseType、および connectorOptions として接続情報を指定します。 また、データベース定義の設定はプロパティ AlierDB.schema に定義オブジェクトを代入することで行います。

モバイル版の初期化手順は以下の通りです:

  1. new AlierDB() して AlierDB のインスタンスを取得する
  2. データベース定義ファイルを読み込み、オブジェクトに変換する
  3. 手順-2 のデータベース定義オブジェクトを引数として、AlierDB.createDatabase() を呼び出す
import { AlierDB } from "/alier_sys/AlierDB.js";

//  1.  使用するデータベース名とバージョンを指定する
const db = new AlierDB({
    //  データベース名
    database: "my_database",
    //  バージョン
    version: 1
});

//  2.  データベース定義を記述したJSONファイルを読み込む
const database_schema = JSON.parse(await Alier.Native.loadText("my-database-schema.json"));

//  3.  データベース定義を適用する
await db.createDatabase(database_schema, true);

Node.js版の初期化手順は以下の通りです:

  1. new AlierDB() して AlierDB のインスタンスを取得する
  2. データベース定義ファイルを読み込み、オブジェクトに変換する
  3. 手順-2 のデータベース定義オブジェクトを手順-1 で取得した AlierDB インスタンスのプロパティ schema に設定する
const { AlierDB } = require("@suredesigns/alier/AlierDB");

//  1.  使用するデータベース名と種別および接続情報を指定する
const db = new AlierDB({
    //  データベース名
    database: "my_database",
    //  データベース種別
    databaseType: "some-backend-database",
    //  接続情報
    connectorOptions: {
        user    : "user name",
        host    : "host name",
        port    : 5432,
        password: "test_password",
    }
});

//  2.  データベース定義を記述したJSONファイルを読み込む
const fs = require("node:fs/promises");
const database_schema = JSON.parse(await fs.readFile("my-database-schema.json", { encoding: "utf8"}));

//  3.  データベース定義を設定する
db.schema = database_schema;
データベース定義の必要性
  • 最後に行ったデータベース定義の設定は重要です。 AlierTable はテーブルの参照や変更のためにデータベース定義を参照します。 そのため、データベース定義を AlierDB が持っていないと、テーブルの参照および変更に失敗します。

補足


特定のデータベースを利用する

アプリケーション開発者は、特定のデータベース管理システムを AlierDB から利用したい場合、DBConnector クラスの派生クラスを実装することで、そのデータベースに対して AlierDB が動作するようにできます。

詳細は DBConnector モジュールの解説および DefaultDBConnector モジュールの解説を参照してください

実行結果

AlierDB および AlierTable のメソッドで、データベース操作を伴うものは、実行結果として、操作に成功したか失敗したかを伝えるオブジェクトを返します。

成功時は以下の形式のオブジェクトを返します:

  • object.status: boolean

    処理が成功したことを表します。固定値で true を持ちます。

  • object.records: Array<object> | undefined

    SELECT 文が実行された場合、取得したレコードを表すオブジェクトの配列です。 それ以外の場合、このプロパティは定義されません(undefined)。

    各レコードオブジェクトは、SELECT 文で取得するカラム名と同名のプロパティが定義されます。 例えば foobar が定義されたレコードに対しては { foo: 123, bar: "ABC" } のような結果が返ります。

失敗時は以下の形式のオブジェクトを返します:

  • object.status: boolean

    処理が失敗したことを表します。固定値で false を持ちます。

  • object.message: string | undefined

    エラーの詳細が分かっている場合、エラーメッセージが設定されます。 エラーの詳細が不明な場合、このプロパティは定義されません(undefined)。

上記の形式のオブジェクトを返すメソッドは以下の通りです:

データベースの状態変更の契機

データベースの状態変更は次のSQLコマンドによって生じます:

  • INSERT

    このSQLコマンドは、データベースの特定のテーブルに、新しいレコードを追加します。

    このSQLコマンドは以下のいずれかの場合に実行されます:

  • UPDATE

    このSQLコマンドは、データベースの特定のテーブルから、条件に一致する既存のレコードのカラムの値を更新します。

    このSQLコマンドは以下のいずれかの場合に実行されます:

  • DELETE

    このSQLコマンドは、データベースの特定のテーブルから、条件に一致するレコードを削除します。

    このSQLコマンドは以下のいずれかの場合に実行されます:

実行例


レコードを取得する

レコードの取得には、まず AlierDB.get() メソッドを使い、対象のテーブルを操作する AlierTable を取得します。 取得した AlierTable に対し AlierTable.get() メソッドを呼び出すことで、対象のテーブルのレコードを取得できます。

データベースへの問い合わせは AlierTable.get() メソッドの呼び出し時に発生します。 問い合わせ結果を取得するには返却された Promise の解決を待つ必要があります。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  テーブルを取得します。
const table_example = db.get({ table: "table_example" });

//  レコードを取得します。
//  これは以下のSQL文の実行と等価です:
//      SELECT *
//      FROM   table_example ;
const result = await table_example.get();

//  結果オブジェクトの status が true なら処理成功、
//  そうでない場合は失敗を表します。
if (result.status) {
    //  成功時には records プロパティを取得できます。
    //  これには取得したレコードオブジェクトの配列が入っています。
    const records = result.records;
    console.log(records);
} else {
    //  失敗時には message プロパティを取得できます。
    //  これには発生したエラーの詳細を伝える文字列が入っています。
    const error_message = result.message;
    console.log(error_message);
}

特定カラムのみを取得する

特定のカラムのみを取得する場合、AlierDB.get() メソッドの引数にプロパティ columns を指定します。 プロパティ columns にはカラム名の配列を指定します。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

const table_example = db.get({
    table  : "table_example",
    columns: [ "id", "description" ]
});

//  レコードを取得します。
//  これは以下のSQL文の実行と等価です:
//      SELECT id, description
//      FROM   table_example ;
const result = await table_example.get();

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

複数のテーブル内容を結合して取得する

テーブルの結合には AlierTablejoin() メソッドを使います。

引数のプロパティ tableJOIN 演算子の右項となる AlierTable のインスタンスを指定し、 JOIN の方法を引数のプロパティ joinType として指定します。

結合条件として、ON および USING に対応する引数のプロパティ、on および using を指定できます。 on は条件式を表す文字列、using はカラムのリストを表す配列です。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

const table_example  = db.get({table: "table_example"  });
const table_example2 = db.get({table: "table_example2" });

//  table_example, table_example2 を結合します。
//  joinType は結合の種類を示し、以下の例では内部結合(INNER JOIN)を
//  使用します。
//  using は USING 句に指定するカラムのリストで、以下では
//  table_example の id カラムと table_example2 の id カラムの値が
//  同値の結合レコードのみを残し、id カラムを一つのカラムにまとめます。
const joined_table   = table_example.join({
    table: table_example2,
    joinType: DBJoinType.INNER_JOIN,
    using: ["id"]
});

//  結合されたテーブルのレコードを取得します。
//  これは以下のSQL文の実行と等価です:
//      SELECT *
//      FROM   table_example
//             INNER JOIN table_example2 
//             USING  ( id ) ;
const result = await joined_table.get()

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

3つ以上のテーブルを結合することも可能です。 AlierTable.join() メソッドは AlierTable のインスタンスを返すため、更に続けて AlierTable.join() メソッドを呼び出すことができます。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

const table_example  = db.get({table: "table_example"  });
const table_example2 = db.get({table: "table_example2" });
const table_example3 = db.get({table: "table_example3" });

//  table_example, table_example2, table_example3 を結合します。
const joined_table   = table_example.join({
    table: table_example2,
    joinType: DBJoinType.INNER_JOIN,
    using: ["id"]
}).join({
    table: table_example3,
    joinType: DBJoinType.INNER_JOIN,
    using: ["id"]
});

//  結合されたテーブルのレコードを取得します。
//  これは以下のSQL文の実行と等価です:
//      SELECT * 
//      FROM   table_example
//             INNER JOIN table_example2 USING ( id )
//             INNER JOIN table_example3 USING ( id ) ;
const result = await joined_table.get()

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

取得するレコードの数を制限する

AlierTableget() メソッドの引数に limit および offset プロパティを指定することで、取得するレコード数を制限できます。 これらはSQLにおける FETCH 句(LIMIT 句)に相当します。 以下に単独での利用例を示しますが、通常は後述の sort プロパティと併用することになるでしょう。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example を取得します
const table_example = db.get({ table: "table_example" });

//  5 番目のレコードから 15 個のレコードを取得します。
//  これは以下のSQL文の実行と等価です:
//      SELECT       *
//      FROM         table_example
//      OFFSET       5 ROWS
//      FETCH NEXT  15 ROWS ONLY ;
//  あるいは
//      SELECT       *
//      FROM         table_example
//      LIMIT       15
//      OFFSET       5 ;
//  NOTE:
//      例示のためにここでは、後述する sort プロパティ(ORDER BY 句)
//      の指定なしに limit, offset を指定していますが、
//      そうした場合、決まったレコードが返す保証がなくなります。
//      そのため通常は、LIMIT 句とともに ORDER BY 句でレコードの順序を
//      指定しておく必要があります。
const result = await table_example.get({
    limit : 15,
    offset:  5
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

取得したレコードを並べ替える

AlierTableget() メソッドの引数に sort プロパティを指定することで、指定したカラムの値についてレコードを整列できます。 これはSQLの ORDER BY 句に相当します。また、sort プロパティの値としてカラム名の先頭に感嘆符(!)をつけることでレコードを降順に並べることができます(感嘆符がない場合には昇順に並びます)。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example を取得します
const table_example = db.get({ table: "table_example" });

//  取得したレコードを column_example について降順に並べ替えます。
//  これは以下のSQL文の実行と等価です:
//      SELECT    *
//      FROM      table_example
//      ORDER BY  column_example DESC ;
const result = await table_example.get({
    sort: "!column_example"
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

前述の limit および offset プロパティを利用し、並べ替え結果から指定の位置のレコードを取得できます。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example を取得します
const table_example = db.get({table: "table_example"});

//  取得したレコードを column_example について降順に並べ替え、
//  5 番目のレコードから(最大)15 個のレコードを取り出します。
//  これは以下のSQL文の実行と等価です:
//      SELECT       *
//      FROM         table_example
//      ORDER BY     column_example DESC
//      OFFSET       5 ROWS
//      FETCH NEXT  15 ROWS ONLY ;
const result = await table_example.get({
    sort  : "!column_example",
    limit : 15,
    offset:  5
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

条件に一致するレコードを取得する

AlierTableget() メソッドの引数に filter プロパティを指定することで、取得するレコードの条件を指定できます。 これはSQLの WHERE 句に相当します。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

const table_example = db.get({ table: "table_example" });

//  column_example が 10 以上かつ column_example2 が 20 以上の
//  レコードを取得します。
//  これは以下のSQL文の実行と等価です:
//      SELECT  *
//      FROM    table_example
//      WHERE   column_example  >= 10
//              AND     
//              column_example2 >= 20 ;
const result = await table.get({
    filter: "column_example >= 10 AND column_example2 >= 20"
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

レコードの集計を行う

AlierTableget() メソッドの引数に aggregate プロパティを指定することで、レコードを集約できます。 aggregate プロパティにはSQLで標準的に用意されているものに対応した関数を指定することもできます。

以下ではSQLの COUNT() 集計関数に対応する、$count() 関数の使用例を示します。この関数は選択されたレコードの個数を与えるものです。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example の、
//  カラム column_example の値のみを抽出したビューを取得します。
const table_example = db.get({ table: "table_example", columns: [ "column_example" ] });

//  column_example が NULL でないレコードを数えます。
//  これは以下のSQL文の実行と等価です:
//      SELECT  column_example
//              COUNT(column_example)
//      FROM    table_example ;
const result = await table_example.get({
    aggregate: $count({
        column: "column_example"
    })
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

独自の集計関数を使って、$count() と同じようにレコード数を数えることもできます。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example の、
//  カラム column_example の値のみを抽出したビューを取得します。
const table_example = db.get({ table: "table_example", columns: [ "column_example" ] });

//  レコードの合計を数えるローカル変数です。
let total = 0;

//  独自に集計関数を定義してレコードを数えます。
//  結果は COUNT(column_example) した場合と同じです。
const result = await table_example.get({
    //  各レコードの取得毎に呼び出されます
    aggregate: record => {
        if (record.column_example != null) {
            total++;
        }
    },
    //  全レコード取得後に呼び出されます
    final: count => {
        console.log({ count, total });
    }
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

条件に一致するレコードをグループ化して集計する

AlierTableget() メソッドと併用するための集計関数として、GROUP BY および HAVING を指定できるものがあります。 以下にSQLの AVG() 集計関数に対応する、$avg() 関数の使用例を示します。この関数はカラムの値の平均を計算するものです。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example の、
//  カラム column_example の値のみを抽出したビューを取得します。
const table_example = db.get({ table: "table_example", columns: [ "column_example" ] });

//  column_example の値についてレコードをグループ化し(GROUP BY)、
//  column_example の値が 0 より大きいグループを抽出し(HAVING)、
//  グループ化されたレコードでの column_example2 の平均を取ります(AVG)。
//  これは以下のSQL文の実行と等価です:
//      SELECT    column_example
//                AVG(column_example2)
//      FROM      table_example
//      GROUP BY  column_example
//      HAVING    column_example > 0 ;
//
//  NOTE:
//      説明のために HAVING を使用していますが、HAVING の評価は
//      グループ化の **後** になるため、インデックスを利用できる場合、
//      WHERE を使った方が高速なことが多いでしょう。
const result = await table_example.get({
    aggregate: $avg({
        column: "column_example2",
        group : [ "column_example" ],
        having: "column_example > 0"
    })
});

if (result.status) {
    const records = result.records;
    console.log(records);
} else {
    const error_message = result.message;
    console.log(error_message);
}

条件に一致するレコードを更新する

レコードの値の更新には AlierTableput() メソッドを使います。 更新するレコードの条件は、put() メソッドに与える引数の filter プロパティとして指定できます。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

const table_example = db.get({ table: "table_example" });

//  column_example2 > 0 を満たすレコードの column_example1 の値を
//  100 に更新します。
//  これは以下のSQL文の実行と等価です:
//      UPDATE  table_example
//      SET     column_example  = 100
//      WHERE   column_example2 > 0 ;
const result = await table_example.put({
    column_example: 100,
    filter: "column_example2 > 0"
});

if (result.status) {
    console.log(result);
} else {
    const error_message = result.message;
    console.log(error_message);
}

レコードを追加する

レコードの追加には AlierTablepost() メソッドを使います。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example を取得します
const table_example = db.get({ table: "table_example" });

//  column_example の値が 'foo' のレコードを挿入します。
//  これは以下のSQL文の実行と等価です:
//      INSERT INTO  table_example
//                   ( column_example )
//      VALUES       ( 'foo' ) ;
//  NOTE:
//      文字列に対しては自動的に一重引用符が前後に追加されます。
//      JavaScript 側で与えた文字列 "foo" は SQL 上では 'foo' という
//      文字列リテラルに置き換えられます。
const result = await table_example.post({ column_example: "foo" });

if (result.status) {
    console.log(result);
} else {
    const error_message = result.message;
    console.log(error_message);
}

条件に一致するレコードを削除する

レコードの削除には AlierTabledelete() メソッドを使います。 削除するレコードの条件は、delete() メソッドに与える引数の filter プロパティとして指定できます。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  データベース database_example からテーブル table_example を取得する
const table_example = db.get({ table: "table_example" });

//  column_example の値が 0 のレコードを削除します。
//  これは以下のSQL文の実行と等価です:
//      DELETE FROM  table_example
//      WHERE        column_example = 0 ;
const result = await table_example.delete({
    filter: "column_example = 0"
});

if (result.status) {
    console.log(result);
} else {
    const error_message = result.message;
    console.log(error_message);
}

SQL文を直接実行する

生のSQL文を実行するには、AlierDBexecSQL() メソッドを使います。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  クエリ文字列を用意します
const statement = "SELECT * FROM table_example WHERE column_example > 0;";

//  データベースに接続します
const connect_result = await db.connect();
if (!connect_result.status) {
    console.log(connect_result.message);
} else {
    //  SQL文を実行します。
    //  column_example > 0 を満たすレコードを取得します。
    const result = await db.execSQL(statement);

    if (result.status) {
        const records = result.records;
        console.log(records);
    } else {
        const error_message = result.message;
        console.log(error_message);
    }

    //  データベースへの接続を切断します
    const disconnect_result = await db.disconnect();
    if (!disconnect_result.status) {
        console.log(disconnect_result.message);
    }
}

登録済みのクエリに引数を渡して再利用する

パラメータつきのクエリはプリペアードステートメントとして登録できます。 登録側では AlierDB インスタンスに対して registerPreparedStatement() メソッドを呼び出します。

//  NOTE: 以下では自動接続が有効であるとします(db.autoConnect === true)
//        またデータベース定義の取得などは割愛しています。
const db = new AlierDB({
    database: "database_example",
    /* その他、データベース接続に必要なオプション */
});

//  プレースホルダつきのクエリ文字列を用意します
const statement = "SELECT * FROM table_example WHERE column_example > ?";

//  プリペアードステートメントを登録します
db.registerPreparedStatement("statement_example", statement);

登録されたプリペアードステートメントは、AlierDB インスタンスに対して execPreparedStatement() メソッドを呼び出すことで利用できます。 その際、第一引数として registerPreparedStatement() メソッドの呼び出しの際に指定したステートメント名を指定する必要があります。

//  NOTE: 以下では変数 db は事前に定義済みとします。

//  指定の lowerLimit を超える値を持つレコードを取得する関数
async function getRecordsWhereColumnExampleGreaterThan(lowerLimit) {
    //  データベースに接続します
    const connect_result = await db.connect();
    if (!connect_result.status) {
        console.log(connect_result.message);
    } else {
        //  プリペアードステートメント statement_example を実行します。
        //  プレースホルダに展開する引数として、配列を与えます。
        //  配列の長さとプレースホルダの個数は一致していなければなりません。
        const result = await db.execPreparedStatement("statement_example", [ lowerLimit ]);

        //  データベースへの接続を切断します
        const disconnect_result = await db.disconnect();
        if (!disconnect_result.status) {
            console.log(disconnect_result.message);
        }

        //  取得結果を返す
        return result;
    }
}

//  プリペアードステートメントの実行

//  column_example > 10 を満たすレコードを取得します
const result1 = await getRecordsWhereColumnExampleGreaterThan(10);

console.log(result1);
//  => { status: true, records: object[] }

//  column_example > 100 を満たすレコードを取得します
const result2 = await getRecordsWhereColumnExampleGreaterThan(100);

console.log(result2);
//  => { status: true, records: object[] }