1

node.jsを使用せずに既存のsqliteデータベースをロードする簡単な完全な例を誰かが提供できますか?

SQL データベースが index.html と同じ場所にあると仮定します。

例:

この例を試してみましたが、「コンテンツ」は未定義です。また、「コンテンツ」内のデータにアクセスする方法がわかりませんか? 完全な例を実際に使用できます。

var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/database.sqlite', true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  var uInt8Array = new Uint8Array(this.response);
  var db = new SQL.Database(uInt8Array);
  var contents = db.exec("SELECT * FROM my_table");
  // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]
};
xhr.send();
4

1 に答える 1

3

私はこれが古いことを知っていますが、さあ、私の友人です。あなたはまさにそこにいました、ほんの少し微調整しました。GitHub の SQL.js ライブラリを使用しているかどうかはわかりませんが、ブラウザーのセキュリティ問題の多くを解決し、SQL 側の作業が脳にとってはるかに簡単になるため、使用してください。

ソースを作成していないか、UTF の問題がある場合は、例外がスローされます。これを一晩で書いたので、いくつかの関数しか実行していませんが、非同期プロセス中に SQLite の問題を防ぐためにコールバックが必要になると想定しています。SQLite または SQL.js ライブラリを使用するのはこれが初めてなので、まだわかりません。

重要!これはローカル ソリューションのみであり、高校の更衣室よりも露骨な脆弱性があります。これは、インターネットに公開されているものには絶対に使用しないでください。

これはすべて、関数内ではなく、クラスの先頭で宣言されています。複数のクエリを実行し、オブジェクトが大きくなりすぎた場合にオブジェクトのロード/アンロードのオーバーヘッドが発生しないようにするため、これは意図的なものです。

ソースの完全修飾パスに注意してください...相対パスは機能しませんでした。

var xhrLocal = new XMLHttpRequest();
xhrLocal.open('GET', 'http://localhost/mp3/data/media.sqlite', true);
xhrLocal.responseType = 'arraybuffer';

var localData;

xhrLocal.onload = function(e) {
  var uInt8Array = new Uint8Array(this.response);
  localData = new SQL.Database(uInt8Array);
};

xhrLocal.send();

この時点で、データベースは localData というオブジェクトにロードされ、どこからでもクエリを実行できます。これは、ジャンル情報を取得するために作成したクエリです。

function FillGenreLists() {

    var sqlSel = 'SELECT * FROM GenreData';
    var data = localData.exec(sqlSel);

    var output = [];
    $.each(data[0].values, function(key, value)
    {
        output.push('<option value="'+ value[0] +'">'+ value[1] +'</option>');
    });

    $('#selGenres').html(output.join(''));
}

SQL 呼び出しからの出力は通常、配列の配列です。それを変更することを心配する必要はありません。SQL 呼び出しの結果をコンソールに出力し、返されたフィールドと値に注意してください。そこから $.each を使用するだけです。コンテンツ。

これは別のクエリです。同じ前提ですが、SQL ステートメントを作成して MS SQL サーバーにプッシュし、ローカル コレクションにあるアーティストに関する FreeDB データを取得することを目的としています。

注: これはすべて、ローカルの sqlite テーブルにクエリを実行し、SQL を生成して、別の conn を使用して MS SQL にプッシュするか、ジェネリック プロシージャを利用することで、1 回の呼び出しで実行できますが、ここでは単純にしておきます。

function PrepareMSSQLFilteredFreeDBTables(StartLetter, EndLetter, TempTableName) {

    var sqlSel = "SELECT * FROM ArtistData WHERE ArtistText BETWEEN '" + StartLetter + "' AND '" + EndLetter + "' ORDER BY ArtistText";
    var data = localData.exec(sqlSel);

    $('.array-cols').append('SELECT * INTO ' + TempTableName + ' FROM FreeDB WHERE DARTIST IN (');

    var iLen = (data[0].values.length - 1);

    $.each(data[0].values, function(a, b) {
        var sRes;
        if (a === iLen) { sRes = "'" + b[1].replace("'", "''") + "')"; }
        else { sRes = "'" + b[1].replace("'", "''") + "', "; }
        $('.array-cols').append(sRes);
    });
}
于 2016-07-03T16:37:36.787 に答える