sql.jsを用いた電子SQLiteデータベースの操作

純粋なJS sqliteのツールsql.js--推奨。

まず、sql.jsに

sql.js(https://github.com/kripken/sql.js)Emscripten SQLiteのコンパイルCコードを使用して、SQLiteはWebassemblyに移植します。これは、仮想データベースファイルがメモリに格納されている、それがデータベースに加えられた変更を保持しません使用しています。しかし、それはあなたがJavaScriptの配列のタイプのために作成したデータベースを既存のSQLiteファイルをインポート、およびエクスポートすることができます。

何の結合またはノード-GYPのCコンパイラはsql.jsは、JavaScriptライブラリなどの任意の伝統的な使用のように、簡単なJavaScriptファイルで、ありません。(JavaScriptを使用している場合、例えばネイティブアプリケーションを構築するにはElectronNode.jsの中で)、または仕事、あなたは(ローカルのSQLiteのバインディングとJavaScriptを使用することを好むかもしれhttps://www.npmjs.com/package/ sqlite3の)。

SQLiteは、パブリックドメインにsql.js MITがライセンスされています。

以前WebAssemblyよりSql.js、そうasm.jsプロジェクトから開始します。それはまだ後方互換性のためasm.jsをサポートしています。

第二に、なぜべきsql.js

ノード電子あなたはsqlite3のを使用する場合のネイティブ(https://electronjs.org/docs/tutorial/using-nativeモジュール電子公文書を使用してアプリケーションを開発する場合、参照、ステップは、あまりにも多くの問題を再構築する必要がありますインストールNPM除く外-node-モジュール)。

あなたは箱から出して使用する準備SQLデータベースを探している場合は、sql.jsは良い選択でしょう。sql.jsはsqliteの、SQLiteの使用と基本的に差はないのWebassemblyバージョンです。sql.jsは地元のサポートが導入NPMにCDNをブラウザに直接導入、またはダウンロードSQL-wasm.jsおよびSQL-wasm.wasmサポートしています。

第三に、電子プロジェクトで設置sql.js

1は、私たちのような優れたプロジェクトハロー世界の電子を、構築していることを前提としていhttps://xushanxiang.com/2019/11/installing-electron.html

2、インストールsql.js

cnpm install sql.js --save

インストール後、ディレクトリ構造を参照してください。

tree node_modules/sql.js -L 2
node_modules / sql.js 
├──作者
├──GUI
│└──index.htmlを
├──LICENSE
├──Makefileの
├──README.md
├──キャッシュ
│├──check.txt
│├──拡張-functions.c
│└──sqlite-amalgamation-3280000.zip
├──DIST
│├──SQL-ASM-debug.jsとするのが最良
│├──SQL-ASM-メモリgrowth.js
│├──SQL-ASM .js
│├──SQL-wasm-debug.jsとするのが最良
│├──SQL-wasm-debug.wasm
│├──SQL-wasm.js
│├──SQL-wasm.wasm
│├──worker.sql- ASM-debug.jsとするのが最良
│├──worker.sql-asm.js
│├──worker.sql-wasm-debug.jsとするのが最良
│└──worker.sql-wasm.js
├──例
│├──GUI
├──README.md│
│├──persistent.html
│├──repl.html
│├──requireJS.html
│├──simple.html
│└──start_local_server.py
├──index.htmlを
├─ ─アウト
│├──api.js
│├──延長-functions.bc
│├──sqlite3.bc
│└──worker.js
├──package.json
├──のsqlite-SRC
│└──sqlite-合併-3280000
└──SRC
├──api-data.coffee
├──api.coffee
├──exported_functions.json
├──exported_runtime_methods.json
├──exports.coffee
├──出力post.js
├──出力pre.js
├──シェルpost.js
├──シェルpre.js
└──worker.coffee
9つのディレクトリ、41個のファイル

distのディレクトリの説明を参照してくださいhttps://github.com/kripken/sql.js#versions-of-sqljs-included-in-the-distributed-artifacts

第四に、電子プロジェクトでは、どのようにSQLiteデータベース運用sql.jsを使用します

1、SQLiteデータベースを作成します

私たちは、あなたがオンラインSQLインタプリタ(http://kripken.github.io/sql.js/examples/GUI/)およびダウンロードを作成することができ、コマンドラインを作成することができます。

//kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/コードを書くとき、あなたは--httpソースコードのコメントによって生成された完全なドキュメントを参照することができますドキュメント/クラス/ Database.html

私たちは、プロジェクトのルートディレクトリにデータベースsql.dbをダウンロードするには、後者を使用しています。私たちの現在のプロジェクトのファイル構造を見てください:

Dツリー-L 1 

├──index.htmlを
├──main.js
├──node_modules
├──package.json
└──sql.db
1つのディレクトリ、ファイル4

もちろん、我々はまた、動的に作成するには、プロジェクトを実行しますが、静的ファイルのディレクトリを作成し、静的ファイルのディレクトリに関連するファイルをコピーすることができます。

→ mkdir -p static/js
→ cp node_modules/sql.js/dist/sql-wasm.* static/js/
→ ls static/js/
  sql-wasm.js   sql-wasm.wasm

そして、index.htmlファイルの内容を変更します。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>create the database</title>
  </head>
  <body>
    <div id="result"></div>
    <script src='./static/js/sql-wasm.js'></script>
<!--如果在主进程中,则用var initSqlJs=require('sql-wasm.js')--> <script> var fs = require("fs"); var config = { // 指定加载sql-wasm.wasm文件的位置 locateFile: filename => `./static/js/${filename}` }; initSqlJs(config).then(SQL => { // 创建数据库 var db = new SQL.Database(); // 运行查询而不读取结果 db.run("CREATE TABLE test (col1, col2);"); // 插入两行:(1,111) and (2,222) db.run("INSERT INTO test VALUES (?,?), (?,?)", [1,111,2,222]); // 将数据库导出到包含SQLite数据库文件的Uint8Array // export() 返回值: ( Uint8Array ) — SQLite3数据库文件的字节数组 var data = db.export(); // 由于安全性和可用性问题,不建议使用Buffer()和new Buffer()构造函数 // 改用new Buffer.alloc()、Buffer.allocUnsafe()或Buffer.from()构造方法 // var buffer = new Buffer(data); var buffer = Buffer.from(data, 'binary'); // 被创建数据库名称 var filename = "d.sqlite"; fs.writeFileSync(filename, buffer); document.querySelector('#result').innerHTML = filename + "Created successfully."; }); </script> </body> </html>

あなたは、ソフトウェアのインストールのようではないSQLiteStudioを行う場合は、データベースファイルを動的にロードhttp://kripken.github.io/sql.js/examples/GUI/上に作成した後、以下の結果テーブルを取得するには、次のSQL文を実行することができます。

SELECT * FROM test
COL1 COL2
1 111
2 222

2、SQLiteのデータベースのクエリ操作

次のようにindex.htmlファイルを置き換えます。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Execute SELECT sql</title>
  </head>
  <body>
    <div id="result"></div>
    <script src='./static/js/sql-wasm.js'></script>
    <script>
      var fs = require("fs");
      var filebuffer = fs.readFileSync('d.sqlite');
      var config = {
        // 指定加载sql-wasm.wasm文件的位置
        locateFile: filename => `./static/js/${filename}` 
      };
      initSqlJs(config).then(SQL => {
        // 加载数据库到内存中
        var db = new SQL.Database(filebuffer);
        var res = db.exec("SELECT * FROM test");
        console.log(JSON.stringify(res));
        // [{"columns":["col1","col2"],"values":[[1,111],[2,222]]}]
      });
    </script>
  </body>
</html>

3、SQLiteデータベースを追加するために、変更、削除操作

次のようにindex.htmlファイルを置き換えます。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Execute SELECT sql</title>
  </head>
  <body>
    <div id="result"></div>
    <script src='./static/js/sql-wasm.js'></script>
    <script>
      var fs = require("fs");
      var filebuffer = fs.readFileSync('d.sqlite');
      var config = {
        // 指定加载sql-wasm.wasm文件的位置
        locateFile: filename => `./static/js/${filename}` 
      };
      initSqlJs(config).then(SQL => {
        // 加载数据库到内存中
        var db = new SQL.Database(filebuffer);

        // 插入两行:(1,111) and (2,222)
        db.run("INSERT INTO test VALUES (?,?), (?,?)", [3,333,4,444]);
        var res = db.exec("SELECT * FROM test");
        console.log(JSON.stringify(res));
        // [{"columns":["col1","col2"],"values":[[1,111],[2,222],[3,333],[4,444]]}]

        // 修改一行
        db.run("UPDATE test SET col2=(?) WHERE col1=(?)", [3333,3]);
        res = db.exec("SELECT * FROM test");
        console.log(JSON.stringify(res));
        // [{"columns":["col1","col2"],"values":[[1,111],[2,222],[3,3333],[4,444]]}]

        // 删除一行
        db.run("DELETE FROM test WHERE col1=(?)", [4]);
        res = db.exec("SELECT * FROM test");
        console.log(JSON.stringify(res));
        // [{"columns":["col1","col2"],"values":[[1,111],[2,222],[3,3333]]}]

        // 注意:上面的增、改、删都只是对载入内存中的数据进行变更,我们需要把内存中的数据再存入磁盘文件中,不然一切皆枉然。
        var data = db.export();
        var buffer = Buffer.from(data, 'binary');
        fs.writeFileSync("d.sqlite", buffer);
        document.querySelector('#result').innerHTML = "SQLite database changed.";
      });
    </script>
  </body>
</html>

オリジナル:https://xushanxiang.com/2019/11/electron-sql-js-sqlite.html

おすすめ

転載: www.cnblogs.com/xusx2014/p/11955398.html
おすすめ