首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sql.js在javascript中加载sqlite数据库

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

Stack Overflow用户
提问于 2016-04-20 15:55:27
回答 1查看 2.8K关注 0票数 1

有人可以提供一个不使用node.js加载现有sqlite数据库的简单完整示例吗?

假设sql db位于与index.html相同的位置。

示例:

我试过这个例子,但是“内容”还没有定义。另外,我不知道如何访问“内容”中的数据?我真的需要一个完整的例子。

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-03 16:37:36

我知道这很古老,但你来了,我的朋友。你就在那儿,只是有点小调整。我不确定您是否正在使用来自SQL.js的GitHub库,但是请这样做,因为它解决了很多浏览器安全问题,并使SQL方面的事情在头脑中变得容易得多。

如果您没有创建源或者有一些UTF问题,那么异常将被抛出。我一晚就写了这篇文章,所以我只运行了几个函数,但我假设需要回调才能防止异步过程中出现SQLite问题。这是我第一次使用SQLite或SQL.js库,所以我还不知道。

很重要!这只是一个本地的解决方案,它比高中更衣室有更明显的弱点。这绝不应该被用于任何暴露在互联网上的东西。

这都是在我的类中声明的,而不是在函数中。这是有目的的,因为我运行多个查询,并且不希望在对象太大时加载/卸载对象的开销。

注意,source...relative路径上的完全限定路径对我不起作用。

代码语言:javascript
复制
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的对象中,您可以从任何地方查询它。这是我写的一个查询来获取体裁信息。

代码语言:javascript
复制
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中,并获取有关本地集合中艺术家的FreeDB数据。

注意:所有这些都可以在一个调用中完成,方法是查询本地sqlite表,生成sql并使用不同的conn将其推送到MS,或者更好的方法是使用泛型proc,但让我们暂时保持简单。

代码语言:javascript
复制
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);
    });
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36749154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档