我有一个原生的sqlite数据库,我想通过HTML5 webstorage加载/读取它。但我无法做到这一点。我已经通过将文件放在同一文件夹中并运行以下脚本来尝试它。
<html>
<head>
<title> Search </title>
<script>
var db = null;
function startapp(){
db = window.openDatabase("artistsWcities.sqlite", '1.0', 'Test', 19 * 1024 * 1024);
if (db) {
alert("database loaded");
}
}
</script>
</head>
<body onload="startapp()">
</body>
</html>
但它创建了新文件而不是阅读新文件。怎么做?
答案 0 :(得分:0)
在W3C中specification openDatabase
构造函数仅应用第一个参数,如浏览器数据库名称,而不是任何文件名。规格报价:
用户代理必须表现得好像数据库是以其他方式托管的 没有资源的完全空的环境。例如,尝试 读取或写入文件系统将失败。
您只能在浏览器扩展或组件中从本地资源获取sqlite文件,例如Firefox。
您可以通过服务器请求获取文件artistsWcities.sqlite
,例如,AJAX,并成功回调它到浏览器本地数据库。有关此question的更多信息。
但是,如果您的代码示例来自浏览器的扩展名,请仔细阅读文档。如果是Firefox扩展,您可以通过以下方式加载本地数据库:
Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");
let file = FileUtils.getFile("ProfD", ["my_db_file_name.sqlite"]);
let mDBConn = Services.storage.openDatabase(file); // Will also create the file if it does not exist