我在我的 chrome 应用程序中为 SQLite 使用 SQL.js,我正在加载外部 db 文件以执行查询,现在我想将我的更改保存到本地存储以使其持久化,它已经在这里定义-
https://github.com/kripken/sql.js/wiki/Persisting-a-Modified-Database
我正在使用与文章中定义的相同的方式-
function toBinString (arr) {
var uarr = new Uint8Array(arr);
var strings = [], chunksize = 0xffff;
// There is a maximum stack size. We cannot call String.fromCharCode with as many arguments as we want
for (var i=0; i*chunksize < uarr.length; i++){
strings.push(String.fromCharCode.apply(null, uarr.subarray(i*chunksize, (i+1)*chunksize)));
}
return strings.join('');
}
function toBinArray (str) {
var l = str.length,
arr = new Uint8Array(l);
for (var i=0; i<l; i++) arr[i] = str.charCodeAt(i);
return arr;
}
将数据保存到存储器 -
var data =toBinString(db.export());
chrome.storage.local.set({"localDB":data});
并从存储中获取数据-
chrome.storage.local.get('localDB', function(res) {
var data = toBinArray(res.localDB);
//sample example usage
db = new SQL.Database(data);
var result = db.exec("SELECT * FROM user");
});
现在,当我进行查询时,我收到了这个错误 -
错误:文件已加密或不是数据库
在 chrome.storage 和 localStorage 中存储值有什么不同吗?因为它使用 localStorage 可以正常工作,请在此处找到工作示例-
http://kripken.github.io/sql.js/examples/persistent.html
正如此处建议的文件 - https://developer.chrome.com/apps/storage
我们不需要在 chrome.storage API 中使用 stringify 和 parse,不像 localStorage,我们可以直接保存对象和数组。
当我尝试从 db.export 保存结果返回而不进行任何转换时,我收到此错误-
无法将值序列化为 JSON
所以请帮助我,将数据库导出保存在 chrome 存储中的方法是什么,我做错了什么吗?