使用 sql.js 在 javascript 中加载 sqlite 数据库

loading sqlite database in javascript with sql.js

有人可以提供一个不使用 node.js.

加载现有 sqlite 数据库的简单完整示例吗?

假设 sql 数据库与 index.html

位于同一位置

示例:

我试过这个例子,但是 "contents" 是未定义的。另外,我不知道如何访问 "contents" 中的数据?我真的可以使用一个完整的例子。

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();

我知道这已经过时了,但是我的朋友,给你吧。你就在那里,只是一点点调整。我不确定您是否正在使用 GitHub 中的 SQL.js 库,但请这样做,因为它解决了很多浏览器安全问题,并使 SQL 方面的事情更容易在大脑中进行.

如果您没有创建源代码或有一些 UTF 问题,将抛出异常。我在一个晚上写了这篇文章,所以我没有 运行 多个函数,但我假设需要回调来防止异步过程中的 SQLite 问题。这是我第一次使用 SQLite 或 SQL.js 库,所以我还不知道。

重要! 这只是一个本地解决方案,它比高中更衣室有更多明显的漏洞。绝不能将其用于暴露在互联网上的任何东西。

这都是在我的 class 的顶部声明的,而不是在函数内。这是有目的的,因为我 运行 多个查询并且不希望 loading/unloading 和 object 的开销太大。

请注意源上的完全限定路径...相对路径对我不起作用。

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 的 object 中,您可以从任何地方查询它。这是我为获取流派信息而写的查询。

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 调用的结果输出到控制台并注意 return 字段和值,从那里只需使用 $.each 即可。

这是另一个查询,前提相同但目标是创建一个 SQL 语句以推送到 MS SQL 服务器并获取有关我本地 [=39= 中的艺术家的 FreeDB 数据].

注意:这一切都可以通过查询我的本地 sqlite table,生成 sql 并将其推送到 MS,在一次调用中完成SQL 使用不同的 conn 或通过使用通用 proc 甚至更好,但现在让我们保持简单。

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);
    });
}