从web工作程序和主浏览器线程访问相同的websql数据库
accessing the same web sql database from a web worker and the main browser thread
我已经在谷歌上搜索了很多,无法确定我是否应该能够从主ui线程和web工作者访问相同的websql数据库。
我正在使用asyncapi,因为我相信这是唯一一个为web工作者和主ui线程实现的api。
基本上,当两个线程对同一个数据库同时执行事务时,我会遇到问题。SQLite支持多个线程以可控的方式访问数据库,因此这应该是可能的。
有人这样做过吗?
Webworker的功能非常有限。您无法访问websql数据库或localStorage。唯一的解决办法是将消息发送到处理更新的主窗口。
编辑:
以下是可用webworker功能的链接:
https://developer.mozilla.org/en/DOM/Worker/Functions_available_to_workers
查看SQLite常见问题解答,有一个是SQLite线程安全吗?涉及SQLITE_THREADSAFE编译时选项的问题。请参见SQLite的编译选项。
然后,在SQLite理解的SQL的核心函数部分,有一个sqlite_compileoption_get(N)
函数:
sqlite_compileoption_get()SQL函数是围绕sqlite3_compileoption_get()C/C++函数。此例程返回用于生成SQLite的第N个编译时选项,如果N超出,则为NULL范围另请参阅compile_options杂注。
我认为你可以写一个SQLite语句,并从你的JavaScript调用,看看PRAGMA compile_options如何;已设置。
在Chrome(29版测试)上,您现在可以访问webSql,只是不使用window
var db=window.openDatabase(....);
而是使用
var db=openDatabase(....);
此外,在调用executeSql
时,请确保在第二个回调函数中记录错误消息。这有助于查看错误所在。
var db=openDatabase('myDB', '', 'my first database', 2 * 1024 * 1024);
db.transaction(function(tx){
tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)',[],function(tx,results){
self.postMessage("passed");
},function(_trans,_error){self.postMessage(_error.message)});
tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "synergies")',[],function(tx,results){
self.postMessage("passed");
},function(_trans,_error){self.postMessage(_error.message)});
});
- HTML 5 帮助.使用websql数据库中的动态javascript渲染选项
- 为什么除了数据库(WebSQL)之外,其他数据库名称在android中不起作用
- js-worker和phonegap上的websql数据库
- 将数据库存储/备份到一个文件中,IndexeDB、WebSQL和SQLlite的区别
- 将javascript值插入websql数据库
- websql phonegap应用程序:数据库升级
- 创建 WebSQL 数据库,然后删除自身
- Chrome 扩展 WebSQL - 需要背景和内容页面才能访问相同的数据库,但它们不需要
- 将WebSQL数据库复制到其他位置
- 离子收集重复 - 未命中由websql数据库填充
- 将数据从异步请求添加到 WebSQL 数据库时出错
- 防止 WebSQL 数据库中的 SQL 注入?(如何处理数据中的报价?
- 优化WebSQL本地数据库填充
- 使用javaScript从WebSQL数据库返回多行作为数组
- 从web工作程序和主浏览器线程访问相同的websql数据库
- WebSQL | SQLite -插入"?字符输入数据库
- 从websql数据库中获取现有表
- 数据库选择所有在服务中的angular websql,获取数组
- 将JSON数据插入Sqlite/webSQL数据库
- 如何将WebSQL数据库导出为.sql文件?(如,mysqldump)