【发布时间】:2014-07-08 09:46:57
【问题描述】:
所以我正在使用 sql.js 库,即 javascript 中的 sqlite 端口,可以在这里找到https://github.com/kripken/sql.js。
这是我打开和读取来自本地平面文件存储的数据库的代码。
首先通过此 HTML 选择本地文件的文件
<input type="file" id="input" onchange="handleFiles(this.files)">
幕后js代码如下,
function handleFiles(files) {
var file = files[0];
var reader = new FileReader();
reader.readAsBinaryString(file);
openDbOnFileLoad(reader);
function openDbOnFileLoad(reader){
setTimeout(function () {
if(reader.readyState == reader.DONE) {
//console.log(reader.result);
db = SQL.open(bin2Array(reader.result));
execute("SELECT * FROM table");
} else {
//console.log("Waiting for loading...");
openDbOnFileLoad(reader);
}
}, 500);
}
}
function execute(commands) {
commands = commands.replace(/\n/g, '; ');
try {
var data = db.exec(commands);
console.log(data);
} catch(e) {
console.log(e);
}
}
function bin2Array(bin) {
'use strict';
var i, size = bin.length, ary = [];
for (i = 0; i < size; i++) {
ary.push(bin.charCodeAt(i) & 0xFF);
}
return ary;
}
现在这工作了,我可以访问数据库中的所有列和值,但是有一列是 blob 类型的,它只是显示为空。关于如何访问此 blob 内容的任何想法?
正确答案!
所以我在这个问题中想要问的只是如何使用 sql.js 读取 blob 类型的列的内容。正确答案是在问题中指定列名,对于包含 blob 类型数据的列,使用 hex 函数获取其内容,即从表中选择 column1,hex(column2)。这绝不是关于最有效的方法的问题。我还为此写了blog post。
【问题讨论】:
标签: sqlite blob javascript emscripten