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

使用sql.js在javascript中加载sqlite数据库,javascript,sqlite,sql.js,Javascript,Sqlite,Sql.js,有人能提供一个简单完整的示例,说明如何不使用node.js加载现有的sqlite数据库 假设sql数据库与index.html位于同一位置 例如: 我尝试了这个例子,但是“内容”没有定义。而且,我不知道如何访问“内容”中的数据?我真的可以用一个完整的例子 var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/database.sqlite', true); xhr.responseType = 'arraybuffer'; xhr.

有人能提供一个简单完整的示例,说明如何不使用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();

我知道这很老了,但给你,我的朋友。你就在那里,只是稍微调整一下。我不确定您是否正在使用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(''));
}
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);
    });
}