有人可以提供一个不使用node.js加载现有sqlite数据库的简单完整示例吗?
假设sql db位于与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();发布于 2016-07-03 16:37:36
我知道这很古老,但你来了,我的朋友。你就在那儿,只是有点小调整。我不确定您是否正在使用来自SQL.js的GitHub库,但是请这样做,因为它解决了很多浏览器安全问题,并使SQL方面的事情在头脑中变得容易得多。
如果您没有创建源或者有一些UTF问题,那么异常将被抛出。我一晚就写了这篇文章,所以我只运行了几个函数,但我假设需要回调才能防止异步过程中出现SQLite问题。这是我第一次使用SQLite或SQL.js库,所以我还不知道。
很重要!这只是一个本地的解决方案,它比高中更衣室有更明显的弱点。这绝不应该被用于任何暴露在互联网上的东西。
这都是在我的类中声明的,而不是在函数中。这是有目的的,因为我运行多个查询,并且不希望在对象太大时加载/卸载对象的开销。
注意,source...relative路径上的完全限定路径对我不起作用。
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中,并获取有关本地集合中艺术家的FreeDB数据。
注意:所有这些都可以在一个调用中完成,方法是查询本地sqlite表,生成sql并使用不同的conn将其推送到MS,或者更好的方法是使用泛型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);
});
}https://stackoverflow.com/questions/36749154
复制相似问题