如何从 JavaScript 压缩 WebSQL 数据库
Posted
技术标签:
【中文标题】如何从 JavaScript 压缩 WebSQL 数据库【英文标题】:How to compress WebSQL database from JavaScript 【发布时间】:2011-07-20 15:00:08 【问题描述】:我开发了一个使用 html5 + WebSQL 的应用程序,它将数据从本地数据库同步到服务器。
删除数据时,sqlite 数据库文件的大小保持不变。我知道这包含空白空间,并且在插入新数据时会被填充,但由于限制,我希望尽可能小。
我知道 sqlite 中的 VACUUM 命令可以压缩数据库并删除未使用的空间,但是当我尝试从 javascript 在 WebSQL 数据库上运行它时,它会失败并显示错误“逻辑错误或缺少数据库”。从浏览器外部运行命令可以正常工作。
我的问题是:
能否通过 JavaScript 以某种方式执行 VACUUM 命令?
浏览器会自动实现这一点,最终会被调用吗? (找不到任何有关此的文档)
感谢您的帮助。
【问题讨论】:
【参考方案1】:由于 WebSQL 的废弃/停止工作的性质,错误/功能请求不会 - 也不会 - 得到尊重。同样的问题也存在于 Chromium 错误中,例如,没有响应。
看来你的两个问题是最糟糕的:
1:因为vacuum命令只能在不连接数据库的情况下运行,所以只能从命令行运行。在浏览器或javascript中似乎没有“断开数据库然后运行VACUUM”命令。
2:不要指望它。尚不清楚它是否会在达到最大尺寸限制时运行,即使它运行,您也会在达到最大尺寸限制之前很久就注意到严重的减速。
您最多可以向插件或javascript上下文之外的其他东西发送命令,这些插件本身可以运行命令...现在已被弃用,因此这是一个有争议的问题。对于遗留应用程序,如果您必须拥有该功能,则必须在简单的网页/js 上下文之外完成。
未来/现代应用程序现在使用 IndexedDB;仅针对旧版应用程序回答了此问题。
【讨论】:
以上是关于如何从 JavaScript 压缩 WebSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何从 JavaScript 中删除整个 IndexedDB 数据库?
如何从 SQL where 子句创建一个 JavaScript 函数,以将其作为谓词传递给 JavaScript 数组的过滤函数?