Aizhi EdgerOS での SQLite3 データベース エンジンの使用方法に関する詳細な分析

1. SQLite の概要

  • データ管理はアプリケーション開発者が直面する最も一般的な課題の 1 つであり、Alipay の残高であれ、JD ショッピング カート内の商品であれ、ユーザーの問い合わせ、送金、買い物など、さまざまな利用シーンに対応します。
  • EdgerOS インテリジェント エッジ コンピューティング オペレーティング システムには、EdgerOS のメディア センター モジュールなどの複数のデータベース機能が組み込まれており、ビデオ、写真、テキストなどのデータ ファイルの管理を完了できます。また、EdgerOS自体には、外部データベースへの接続を容易にするMySQLやRedisなどの一般的に使用される複数のデータベースクライアントが搭載されているほか、SQLite3データベースエンジンも搭載されており、開発者の自由にカスタマイズしたデータ管理のニーズに応えることができます。さまざまなビジネスシナリオで。
  • SQLite は、自己完結型のサーバーレスで構成不要のトランザクション SQL データベース エンジンを実装する、軽量のインプロセス リレーショナル データベースです。 SQLite は世界で最も広く導入されている SQL データベース エンジンであり、最新の DB エンジン ランキングでは 7 位にランクされており、年間を通じてトップ 10 内に留まっています。

ここに画像の説明を挿入します

2. SQLite3のデータ型

  • SQLite3 データベースには次のデータ型があります。
    • NULL の空の値。
    • INTEGER 符号付き整数。
    • REAL 倍精度浮動小数点数。
    • TEXT テキスト タイプは、UTF-8 および UTF-16 のエンコードとデコードをサポートできます。
    • BLOB バイナリ データ型。
  • SQLite3 はアフィニティ タイプの概念をサポートしています。SQL ステートメントを使用してフォームを構築する場合でも、SQL で任意のデータ タイプを使用できます。ただし、データが実際に挿入されるときは、最初にアフィニティ タイプが値の格納方法として使用されます。
  • 次の表に、アフィニティ タイプ間の対応関係を示します。

ここに画像の説明を挿入します

三、EdgerOS SQLite3

  • EdgerOS は SQLite3 データベースを「sqlite3」モジュールにカプセル化します。アプリケーション開発時に次のコードを使用してこのモジュールをインポートできます。
const Sqlite3 = require('sqlite3');
  • SQLite3 インスタンス オブジェクトを初期化し、オブジェクトの API インターフェイスを呼び出してデータベース エンジンの動作を完了する必要があります。

① new Sqlite3(ファイル名[, flags])

  • パラメータの説明:
    • fileName {String} データ ファイルの保存アドレス。fileName が ':memory:' の場合、匿名メモリ データベースの作成を意味します。
    • flags {String} ファイル アクセス タイプ。デフォルトは「c+」です。
  • 次のコードを使用してデータベースのインスタンスを生成できます。渡されたデータ ファイルが存在しない場合は、デフォルトでファイルが作成されます。
const db = new Sqlite3(':memory:');
// or
const db = new Sqlite3('./test.db');
  • open メソッドを使用してデータベース インスタンスを開くこともできます。違いは、open メソッドが例外をスローしないことです。戻り値が未定義の場合は、オープンに失敗したことを意味します。

② Sqlite3.open(ファイル名[, flags ])

  • パラメータの説明:
    • fileName {String} データ ファイルの保存アドレス。
    • flags {String} ファイル アクセス タイプ デフォルトは「c+」です。
  • このデータベース インスタンスを使用して、データベース エンジン上で特定の操作を完了します。
const db = Sqlite3.open('./test.db')
  • データベース インスタンスを作成したので、インスタンスを通じて SQL ステートメントを実行して、テーブルの作成、追加、削除、変更、クエリなどの操作を完了できます。 SQL ステートメントを実行するには、インスタンスで run メソッドを使用するだけです。

③ db.run(sql[, …bind[, query[, arg]])

  • パラメータの説明:
    • sql {String} 実行される SQL ステートメント。
    • …bind SQL ステートメントの「?」に従ってバインドされた {Any} 変数。デフォルトでは変数はバインドされません。
    • query {関数} クエリ ステートメントのコールバック メソッド クエリ ステートメントの場合、クエリされる各レコードはこの関数をコールバックします。
    • arg {Any} オプションのコールバックパラメータ
    • 行 {Object} クエリ結果オブジェクト
    • arg {Any} は、クエリ ステートメントの arg コールバック パラメータを設定します。デフォルトは、未定義です。
  • したがって、上記の説明によれば、run コマンドを使用するだけでデータベース テーブル データの操作制御が完了します。次に、数行の短いコードを使用して、実際のアプリケーションの効果を確認します。
const Sqlite3 = require('sqlite3')
const db = Sqlite3.open('./test.db')
db.run('CREATE TABLE if not exists user(name text, age int);');

db.run('INSERT INTO user VALUES("Jack", 23);');
db.run('INSERT INTO user VALUES("Rose", 21);');

function queryCallback(row) {
    
    
    console.log('name', row.name, 'age', row.age);
}

db.run('SELECT * FROM user;', queryCallback);

[JSRE-CON]name Jack age 23
[JSRE-CON]name Rose age 21

4. SQLite3のトランザクション操作

  • sqlite3 モジュールはデータベース トランザクション操作 API も提供します。データベース トランザクションは、さまざまなデータ項目にアクセスして操作する一連のデータベース操作です。これらの操作はすべて実行されるか、まったく実行されず、分割できない作業単位です。トランザクションは、トランザクションの開始から終了までの間に実行されるすべてのデータベース操作で構成されます。
  • db.begin(): Begin インターフェースはトランザクションを開きます。これは db.run(‘BEGIN;’) と同じです。
  • db.commit(): db.run(‘COMMIT;’) と同じように、トランザクションを送信します。
  • db.rollback(): db.run(‘ROLLBACK;’) と同じように、トランザクションをロールバックします。
  • コードを通じて sqlite3 モジュールのトランザクション操作インターフェイスの使用法を簡単に理解しましょう。
const Sqlite3 = require('sqlite3')
const db = Sqlite3.open('./test.db')
db.run('CREATE TABLE if not exists user(name text, age int);');


db.begin();
db.run('INSERT INTO user VALUES("Jack", 23);');
db.run('INSERT INTO user VALUES("Rose", 21);');
db.commit();

db.begin();
db.run('INSERT INTO user VALUES("Allson", 23);');
db.run('INSERT INTO user VALUES("Babs", 21);');
db.rollback()

db.begin();
db.run('INSERT INTO user VALUES("Chrissie", 23);');
db.run('INSERT INTO user VALUES("Debby", 21);');
db.commit();

function queryCallback(row) {
    
    
    console.log('name', row.name, 'age', row.age);
}

db.run('SELECT * FROM user;', queryCallback);

// 运行实际输出结果
[JSRE-CON]name Jack age 23
[JSRE-CON]name Rose age 21
[JSRE-CON]name Chrissie age 23
[JSRE-CON]name Debby age 21
  • 実際の実行結果から、Allson と Babs が挿入操作を完了した後、すぐにロールバック メソッドを実行してデータのロールバックをトリガーしたため、テーブル内のデータが最終的に出力されたとき、これら 2 つのデータ レコードはテーブル内に存在していなかったことがわかります。データベース。
  • この時点で、誰もが EdgerOS で sqlite3 モジュールを使用する方法を予備的に理解しています。さらに、EdgerOS システムには、K-V ストレージをサポートする LightKV データベース エンジン、自社開発の同期データベース SyncTable、ネットワーク開発でよく使用される mysql クライアント モジュールなど、他の多くの種類のデータベース モジュールも含まれています。公式ドキュメントで確認してください。

おすすめ

転載: blog.csdn.net/Forever_wj/article/details/134883133
おすすめ