JavaScript から sqlite データベースにアクセスして操作するための最良の推奨事項。
10 に答える
sql.js
JavaScript で SQLite を移植したというプロジェクトがあります。
sql.js は、SQLite の C コードを Emscripten でコンパイルすることにより、SQLite を JavaScript に移植したものです。
JavaScript SQLite ソリューションのパノラマ
ブラウザで
Web ブラウザー内から SQLite データベースにアクセスしたい場合、多くの解決策はありません。
sql.js
SQLite C ライブラリはemscriptenを使用して javascript に移植されました。port はAlon Zakai (emscripten の作者でもあります)の名前で開始されました。私はこのライブラリの現在のメンテナーです。sql.js
API は次のようになります。
<script src='js/sql.js'></script>
<script>
//Create the database
var db = new SQL.Database();
// Run a query without reading the results
db.run("CREATE TABLE test (col1, col2);");
// Insert two rows: (1,111) and (2,222)
db.run("INSERT INTO test VALUES (?,?), (?,?)", [1,111,2,222]);
// Prepare a statement
var stmt = db.prepare("SELECT * FROM test WHERE a BETWEEN $start AND $end");
stmt.getAsObject({$start:1, $end:1}); // {col1:1, col2:111}
// Bind new values
stmt.bind({$start:1, $end:2});
while(stmt.step()) { //
var row = stmt.getAsObject();
// [...] do something with the row of result
}
</script>
Web SQL
W3C は、 web sqlと呼ばれるブラウザ内で SQL を実行するためのネイティブ API の開発を開始しました。その API の使用例:
var db = openDatabase('mydb', '1.0', 'my first database', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)');
tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "synergies")');
});
しかし、プロジェクトは放棄されました。したがって、広くサポートされていません。参照: http://caniuse.com/sql-storage
ノード内
ノードでクライアント側の JavaScript を記述する場合は、もう少し選択肢があります。https://www.npmjs.org/search?q=sqliteを参照してください。
ノード-sqlite3
コンパイル ツールチェーンがあり、アプリケーションをさまざまなプラットフォーム用にコンパイルする (または 1 つのプラットフォームのみをターゲットにする) 必要がない場合は、 を使用することをお勧めしますnode-sqlite3
。高速 ( よりもはるかに高速sql.js
) で、完全な API と優れたドキュメントがあります。API の例は次のとおりです。
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');
db.serialize(function() {
db.run("CREATE TABLE lorem (info TEXT)");
var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
for (var i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
console.log(row.id + ": " + row.info);
});
});
db.close();
sql.js
はい、また。sql.js
ノードから使用できます。これは、純粋な JavaScript アプリケーションが必要な場合のソリューションです。ただし、以前のソリューションよりも遅くなります。
sql.js
ノードからの使用方法の例を次に示します。
var fs = require('fs');
var SQL = require('sql.js');
var filebuffer = fs.readFileSync('test.sqlite');
db.run("INSERT INTO test VALUES (?,?,?)", [1, 'hello', true]); -- corrected INT to INTO
var data = db.export();
var buffer = new Buffer(data);
fs.writeFileSync("filename.sqlite", buffer);
クライアント側の JavaScript で作業している場合は、運が悪いと思います... ブラウザーは JavaScript 環境をサンドボックス化する傾向があるため、データベースへのアクセスなどの一般的な容量でマシンにアクセスすることはできません。
クライアント側からアクセスされるサーバー側の SQLite DB について話している場合は、サーバー側のコードを呼び出してアクセスする AJAX ソリューションをセットアップできます。
Rhino やその他のサーバー サイド JavaScript について話している場合は、ホスト言語の SQLite への API アクセス (Rhino の JDBC など) を調べる必要があります。
おそらくあなたの質問をもう少し明確にします...?
Google Gearsには sqlite データベースが組み込まれています。
状況によっては、インストールを強制できる場合があります。それ以外の場合は、あると便利なものとして扱う必要がありますが、インストールされていない場合でもサイトが機能するように、適切に機能を低下させる必要があります。
ブラウザ(つまりクライアント側)でSQLiteデータベースにアクセスする場合は、それをサポートするブラウザが必要です。SpiderApe http://spiderape.sourceforge.net/plugins/sqlite/を使用してこれを行うことができます。これは、ブラウザーがMozillaベース(つまり、SQLiteサポート付き)であることを前提としています。基盤となるライブラリへのアクセスを許可する必要があります(http://www.mozilla.org/projects/security/components/signed-scripts.html)
JavascriptプログラムからSQLiteデータベースへのサーバーサイドアクセスを探している場合は、いくつかのオプションがあります。JSDBは1つのhttp://www.jsdb.org/です。JSEXT別のhttp://jsext.sourceforge.net/ ; とjslibs別のhttp://code.google.com/p/jslibs/
--MV
sql.jsライブラリを使用すると、クライアント側で SQL クエリを呼び出すことができます。そのライブラリを使用すると、.open(data) および .exportData() を呼び出すことで、サーバーとクライアントの間でデータ全体を簡単にストリーミングできます。これはとても便利です。
さらに、HTML5 にはストレージ機能がありますが、新しい技術標準として、すべてのクライアントがそれをサポートするとは限りません。
Lawnchairは、使いやすいキー/値アプローチを提供するため、SQL にこだわっていない場合に非常に適したオプションです。これら 2 つのライブラリは、クライアント側で SQL データベースを操作するための完全なソリューションを作成します。
別の優れたストレージ ライブラリはjstorageです。クライアントの「sql.js」からのデータを保存するために使用できます。多種多様なブラウザー (モバイル ブラウザー、IE7 および IE7 を含む) をサポートし、ブラウザーのクラッシュにも耐えます。
mozilla firefox スタックで XUL API を使用して実行できます。それに関するこのチュートリアル: http://www.arashkarimzadeh.com/articles/10-xul/25-sqlite-api-for-xul-application-using-javascript.html
Windows (HTA または WSH) で特権スクリプトを実行している場合は、"ADODB.Recordset" ActiveXObject を使用して ODBC データ ソースにアクセスできます。
Web ページでクライアント側について話している場合は、上記の投稿 re: Google Gears が最適です。
Macでは?ScriptingBridgeとPatrickGeillerのJSCocoaを活用したGusMeullerのJSTalkをご覧ください。
GusはここでSqliteのサポートについて具体的に話します:http://gusmueller.com/blog/archives/2009/03/jstalk_extras.html ...うまくいきます。
JayDataは、JavaScript を使用して sqLite/webSql を操作するためのツールキットも提供します。ただし、実行するにはブラウザー、Rhine または Nodejs が必要です。