データベースの操作を行うクライアントのラッパーを提供します。
データベース
モジュール一覧
- AlierDB
- DBConnector
- DefaultDBConnector
- MySQLConnector
- OracleDBConnector
- PostgreSQLConnector
- SQLiteConnector
概要
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
に定義オブジェクトを代入することで行います。
モバイル版の初期化手順は以下の通りです:
new AlierDB()
してAlierDB
のインスタンスを取得する- データベース定義ファイルを読み込み、オブジェクトに変換する
- 手順-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版の初期化手順は以下の通りです:
new AlierDB()
してAlierDB
のインスタンスを取得する- データベース定義ファイルを読み込み、オブジェクトに変換する
- 手順-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
文で取得するカラム名と同名のプロパティが定義されます。 例えばfoo
とbar
が定義されたレコードに対しては{ foo: 123, bar: "ABC" }
のような結果が返ります。
失敗時は以下の形式のオブジェクトを返します:
-
object.status
:boolean
処理が失敗したことを表します。固定値で
false
を持ちます。 -
object.message
:string
|undefined
エラーの詳細が分かっている場合、エラーメッセージが設定されます。 エラーの詳細が不明な場合、このプロパティは定義されません(
undefined
)。
上記の形式のオブジェクトを返すメソッドは以下の通りです:
AlierDB.connect()
AlierDB.disconnect()
AlierDB.createDatabase()
AlierDB.delete()
AlierDB.execSQL()
AlierDB.execPreparedStatement()
AlierTable.get()
AlierTable.post()
AlierTable.put()
AlierTable.delete()
データベースの状態変更の契機
データベースの状態変更は次のSQLコマンドによって生じます:
-
INSERT
このSQLコマンドは、データベースの特定のテーブルに、新しいレコードを追加します。
このSQLコマンドは以下のいずれかの場合に実行されます:
AlierDB.execSQL()
メソッドの引数statement
にINSERT
コマンドを指定して呼び出すAlierDB.registerPreparedStatement()
メソッドの引数statement
にINSERT
コマンドを指定してPreparedStatement
のインスタンスを生成し、生成したPreparedStatement
のインスタンスからSQL文を実行するAlierTable.post()
メソッドを呼び出す
-
UPDATE
このSQLコマンドは、データベースの特定のテーブルから、条件に一致する既存のレコードのカラムの値を更新します。
このSQLコマンドは以下のいずれかの場合に実行されます:
AlierDB.execSQL()
メソッドの引数statement
にUPDATE
コマンドを指定して呼び出すAlierDB.registerPreparedStatement()
メソッドの引数statement
にUPDATE
コマンドを指定してPreparedStatement
のインスタンスを生成し、生成したPreparedStatement
のインスタンスからSQL文を実行するAlierTable.put()
メソッドを呼び出す
-
DELETE
このSQLコマンドは、データベースの特定のテーブルから、条件に一致するレコードを削除します。
このSQLコマンドは以下のいずれかの場合に実行されます:
AlierDB.execSQL()
メソッドの引数statement
にDELETE
コマンドを指定して呼び出すAlierDB.registerPreparedStatement()
メソッドの引数statement
にDELETE
コマンドを指定してPreparedStatement
のインスタンスを生成し、生成したPreparedStatement
のインスタンスからSQL文を実行するAlierTable.delete()
メソッドを呼び出す
実行例
レコードを取得する
レコードの取得には、まず 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);
}
複数のテーブル内容を結合して取得する
テーブルの結合には AlierTable
の join()
メソッドを使います。
引数のプロパティ table
に JOIN
演算子の右項となる 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);
}
取得するレコードの数を制限する
AlierTable
の get()
メソッドの引数に 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);
}
取得したレコードを並べ替える
AlierTable
の get()
メソッドの引数に 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);
}
条件に一致するレコードを取得する
AlierTable
の get()
メソッドの引数に 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);
}
レコードの集計を行う
AlierTable
の get()
メソッドの引数に 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);
}
条件に一致するレコードをグループ化して集計する
AlierTable
の get()
メソッドと併用するための集計関数として、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);
}
条件に一致するレコードを更新する
レコードの値の更新には AlierTable
の put()
メソッドを使います。
更新するレコードの条件は、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);
}
レコードを追加する
レコードの追加には AlierTable
の post()
メソッドを使います。
// 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);
}
条件に一致するレコードを削除する
レコードの削除には AlierTable
の delete()
メソッドを使います。
削除するレコードの条件は、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文を実行するには、AlierDB
の execSQL()
メソッドを使います。
// 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[] }