我知道这是旧的,但你去我的朋友。你就在那里,只是稍微调整了一下。我不确定你是否使用 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 甚至更好地通过使用通用 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);
});
}