HTML5 Web SQL 数据库

HTML5 Web SQL 数据库中文讲解

关键要点

  • 研究表明,Web SQL 数据库是一种客户端存储技术,允许使用 SQL 操作浏览器中的数据库,但它不是 HTML5 标准的一部分,而是一个独立规范。
  • 证据显示,Web SQL 基于 SQLite,支持在 Chrome、Safari 和 Opera 等浏览器中运行,但已被 W3C 停止维护,且在 2024 年 4 月(Chromium 124)起从大多数浏览器中移除。
  • 它似乎已被 IndexedDB 和 Web Storage 取代,因为 Web SQL 依赖单一的 SQLite 实现,缺乏多样性支持。
  • 研究建议,开发者应迁移到 IndexedDB 或其他现代存储方案,以确保长期兼容性。

概述

Web SQL 数据库(Web SQL Database)是一种允许网页在客户端存储和查询数据的 API,通过 SQL 语句操作类似 SQLite 的数据库。它曾被用于开发离线 Web 应用,但由于缺乏多厂商支持(仅基于 SQLite),W3C 在 2010 年 11 月停止对其维护。2024 年 4 月,Chromium 浏览器(如 Chrome 和 Edge)已完全移除 Web SQL 支持,Safari 也在 2019 年(Safari 13)移除。开发者应考虑更现代的替代方案,如 IndexedDB。

Web SQL 数据库的核心方法

Web SQL 提供以下三个核心方法:

  1. openDatabase:创建或打开数据库对象。
  2. transaction:控制事务,支持提交或回滚。
  3. executeSql:执行 SQL 查询。

使用方法与示例

以下是一个简单的 Web SQL 示例,用于创建数据库、表并插入数据:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Web SQL 示例</title>
</head>
<body>
    <div id="status">状态信息</div>
    <script>
        // 检查浏览器支持
        if (window.openDatabase) {
            // 创建/打开数据库
            var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);

            // 创建表并插入数据
            db.transaction(function (tx) {
                tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
                tx.executeSql('INSERT INTO LOGS (id, log) VALUES (?, ?)', [1, '测试日志']);
                document.querySelector('#status').innerHTML = '日志已插入';
            });

            // 查询数据
            db.transaction(function (tx) {
                tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
                    var len = results.rows.length;
                    var msg = '<p>找到 ' + len + ' 条记录</p>';
                    for (var i = 0; i < len; i++) {
                        msg += '<p>' + results.rows.item(i).log + '</p>';
                    }
                    document.querySelector('#status').innerHTML += msg;
                });
            });
        } else {
            document.querySelector('#status').innerHTML = '浏览器不支持 Web SQL';
        }
    </script>
</body>
</html>
  • 说明
  • openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024) 创建一个名为 mydb 的数据库,版本为 1.0,描述为 Test DB,大小为 2MB。
  • transaction 用于执行事务,确保操作的原子性。
  • executeSql 执行 SQL 查询,支持占位符 ? 防止 SQL 注入。

浏览器支持

Web SQL 曾受以下浏览器支持,但现已逐步移除:

浏览器支持情况备注
Chrome支持至 Chromium 123(2024年3月),124 起移除基于 SQLite
Safari支持至 Safari 12(2018年),Safari 13 移除基于 SQLite
Opera支持至早期版本推荐使用最新版本
Edge支持至 Chromium 123(2024年3月),124 起移除基于 SQLite
Firefox从未支持推荐使用 IndexedDB
  • 现状:截至 2025 年 7 月 27 日,Web SQL 已被大多数浏览器移除,Firefox 从未支持,推荐使用 IndexedDB 或 Web Storage。
  • HTTPS 要求:部分浏览器要求 HTTPS 环境以确保安全。

特性与优缺点

特性

  • 支持复杂的 SQL 查询,适合关系型数据存储。
  • 异步 API,适合处理大型数据集。
  • 支持事务,确保数据一致性。

优点

  • 熟悉 SQL 的开发者易于上手。
  • 支持离线存储,适合离线应用。
  • 相比 Cookie,存储容量更大(通常 5MB 每域名)。

缺点

  • 已废弃,浏览器支持逐渐移除。
  • 仅基于 SQLite,缺乏多厂商实现。
  • 安全性问题:易受 SQL 注入攻击,需使用占位符 ?

安全与隐私注意事项

  • SQL 注入:避免直接拼接 SQL 语句,使用 executeSql 的占位符功能。
  • 数据安全:Web SQL 数据存储在客户端,易受 XSS 攻击,需过滤用户输入。
  • 隐私:遵守隐私法规(如 GDPR),明确告知用户数据存储方式。

替代方案

由于 Web SQL 已废弃,推荐以下替代方案:

  • IndexedDB:支持更复杂的数据结构,广泛支持,适合现代应用。
  • Web Storage:简单键值对存储,适合小型数据。
  • Service Workers:结合其他 API,实现离线功能。

学习资源

以下是推荐的中文学习资源:

结论

HTML5 Web SQL 数据库曾是一种强大的客户端存储技术,允许通过 SQL 操作浏览器中的数据库。然而,由于其依赖单一 SQLite 实现,W3C 已停止维护,且主流浏览器已移除支持。开发者应迁移到 IndexedDB 或 Web Storage,以确保应用的长期兼容性和安全性。结合推荐的学习资源,用户可以了解其历史用途并快速过渡到现代替代方案。

以上内容基于网络资源和教程,力求全面且专业,供用户参考。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注