web-dev-qa-db-ja.com

JavaScript sqlite

JavaScriptからsqliteデータベースにアクセスして操作するための最良の推奨事項。

44
benphane

クライアント側のJavaScriptで作業している場合は、運が悪いと思います...ブラウザはJavaScript環境をサンドボックス化する傾向があるため、データベースへのアクセスなどの一般的な能力でマシンにアクセスすることはできません。

クライアント側からアクセスするサーバー側のSQLite DBについて話している場合、サーバー側のコードを呼び出してアクセスするAJAXソリューションをセットアップできます。

Rhinoやその他のサーバーサイドJavaScriptについて話している場合は、SQLiteへのホスト言語のAPIアクセス(RhinoのJDBCなど)を調べる必要があります。

おそらくあなたの質問をもう少し明確にしてください...?

11
Mike Stone

sql.js というプロジェクトがあります。これはJavaScriptのSQLiteの移植版です。

sql.jsは、SQLite CコードをEmscriptenでコンパイルすることにより、SQLiteをJavaScriptに移植したものです。

26
Juicy Scripter

Javascript SQLiteソリューションのパノラマ

ブラウザで

Webブラウザー内からSQLiteデータベースにアクセスする場合、多くのソリューションはありません。

sql.js

SQLite Cライブラリはjavascriptに移植emscripten を使用しています。ポートは、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")');
});

ただし、プロジェクトはabandonedになっています。したがって、広くサポートされていません。参照: http://caniuse.com/sql-storage

ノード内

ノードでクライアント側のjavascriptを記述する場合、もう少し選択肢があります。 https://www.npmjs.org/search?q=sqlite を参照してください。

node-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);
17
lovasoa

Google Gears には組み込みのsqliteデータベースがありますが、依存する予定がある場合は、確実にインストールする必要があります。

状況に応じて、インストールを強制できる場合があります。そうでない場合は、Nice-to-haveとして扱う必要があります。

11
Cebjyre

ブラウザ(つまりクライアント側)で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

10
user7878

sql.js ライブラリを使用すると、クライアント側でSQLクエリを呼び出すことができます。このライブラリでは、.open(data)および.exportData()を呼び出すことにより、サーバーとクライアント間でデータ全体を簡単にストリーミングできます。これは非常に便利です。

さらに、HTML5には ストレージ機能 がありますが、新しい技術標準として、すべてのクライアントがそれをサポートするとは想定できません。

Lawnchair は、使いやすいキー/値アプローチを提供するため、SQLにとらわれていない場合に非常に適したオプションです。これら2つのライブラリは、クライアント側でSQLデータベースを操作するための完全なソリューションを作成します。

別の優れたストレージライブラリは jstorage です。クライアントの「sql.js」からのデータを保存するために使用できます。多種多様なブラウザー(モバイルブラウザー、IE7およびIE7を含む)をサポートし、ブラウザーのクラッシュにも耐えます。

3
d.popov

Mozilla firefoxスタックでXUL APIを使用して実行できます。これに関するいくつかのチュートリアル: http://www.arashkarimzadeh.com/articles/10-xul/25-sqlite-api-for-xul-application-using-javascript.html

2
Brain90

Windows(HTAまたはWSH)で特権スクリプトを実行している場合、「ADODB.Recordset」ActiveXObjectを使用してODBCデータソースにアクセスできます。

Webページでクライアント側について話している場合、上記の投稿re:Google Gearsが最善の策です。

2
Joel Anair

Macでは? Scripting BridgeとPatrick GeillerのJSCocoaを活用するGus MeullerのJSTalkをご覧ください。

GusはここでSqliteサポートについて具体的に説明しています: http://gusmueller.com/blog/archives/2009/03/jstalk_extras.html ... worksすごい。

0
jcburns

JayData は、JavaScriptを使用してsqLite/webSqlで動作するツールキットも提供します。ただし、ブラウザ、Rhine、またはNodejsが必要です。

0