gpt4 book ai didi

sqlite - 使用 sql.js 读取 blob 类型的 sqlite3 数据库列时遇到问题

转载 作者:行者123 更新时间:2023-11-28 08:14:43 25 4
gpt4 key购买 nike

所以我正在使用 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 函数获取其内容,即 select column1,hex(column2) from table。这绝不是关于最有效的方法的问题。我还写过blog post关于这个。

最佳答案

这是负责初始化我的 sqlite 数据库的函数的稍微修改的副本:

sqlite.prototype._initQueryDb = function(file, callback) {
self = this;
var reader = new FileReader();

// Fires when the file blob is done loading to memory.
reader.onload = function(event) {
var arrayBuffer = event.target.result,
eightBitArray = new Uint8Array(arrayBuffer),
database = SQL.open(eightBitArray);
self._queryDb = database;

// Trigger the callback to the calling function
callback();
}

// Start reading the file blob.
reader.readAsArrayBuffer(file);
}

在本例中,file 是我从 HTML 输入元素获取的本地 sqlite 数据库句柄。我指定一个在该输入发生更改事件时调用的函数,并从生成的 event.target.files[0] 对象中获取 blob。

为了简洁起见,我遗漏了一些内容,但如果您仍在挣扎,我可以组合一个更小、更简化的示例。

关于sqlite - 使用 sql.js 读取 blob 类型的 sqlite3 数据库列时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23754590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com