# @expo/websql 中文文档

规范地址：https://npmcn.com/package/%40expo/websql/

版本：1\.0\.1
npm 元数据更新时间：2026-09-23T11:27:25.623Z
中文译文更新时间：2026-11-14T05:28:17.392Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40expo/websql
原文对照：https://npmcn.com/package/%40expo/websql/?lang=original
项目主页：https://github.com/nolanlawson/node-websql#readme
源码仓库：https://github.com/nolanlawson/node-websql

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：32.3 kB，12 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：5 个
- 首次发布：2018-05-19T01:01:30.590Z
- 最新版本发布：2018-05-19T01:14:40.093Z
- 近 30 天下载量：287224（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 0 个）

## 中文简介

网络SQL 使用 sqlite 3 为节点执行的数据库 API

## 安装

```sh
npm install @expo/websql
```

也可以使用：`pnpm add @expo/websql`、`yarn add @expo/websql`、`bun add @expo/websql`

## README

注:这是 [博览](http://expo.io/)叉子没有 `'sqlite3'` 在 React Industrial 中使用的依赖 .

# 节点- websql [![Build Status](https://travis-ci.org/nolanlawson/node-websql.svg?branch=master)](https://travis-ci.org/nolanlawson/node-websql) [![Coverage Status](https://coveralls.io/repos/github/nolanlawson/node-websql/badge.svg?branch=master&nonce=foo)](https://coveralls.io/github/nolanlawson/node-websql?branch=master)

这个 [WebSQL 数据库 API](https://www.w3.org/TR/webdatabase/)为节点执行 使用 [平方块3](https://github.com/mapbox/node-sqlite3)。在浏览器中,它回到 `window.openDatabase`。 。 。 .

## 安装

```
npm install websql
```

## 使用量

```js
var openDatabase = require('websql');
```

创建一个名为 SQLite3 的数据库 `mydb.db`数字 :

```js
var db = openDatabase('mydb.db', '1.0', 'description', 1);
```

创建内存数据库 :

```js
var db = openDatabase(':memory:', '1.0', 'description', 1);
```

## API 密码

### openDatabase( 名称、 版本、 描述、 大小 \[, 回调\])

这个 `name` 是数据库的名称。 这是逐字传递给 [平方块3](https://github.com/mapbox/node-sqlite3)。 。 。 .

这个 `version` 是数据库版本( y)_目前被忽略 - 见下文_) (中文(简体) ).

这个 `description` 财务报告和审定财务报表 `size` 属性被忽略,但需要这些属性 与 WebSQL API 兼容.

这个 `callback` 只返回返回相同的数据库对象 同步( e)_目前不支持迁移 - 见下文_) (中文(简体) ).

更多信息,请见WebSQL API [光谱](https://www.w3.org/TR/webdatabase/) 或者说 [各种](http://www.html5rocks.com/en/tutorials/webdatabase/todo/) [教程](https://npmcn.com/package/%40expo/websql/html5doctor.com/introducing-web-sql-databases/)。 。 。 .

详情 `sqlite3`,参见 [sQLite3 读取器](https://npmcn.com/package/%40expo/websql/sqlite3)。 。 。 .

### 在浏览器中

您也可以在浏览器中使用此模块(通过浏览/Webpack/etc.), 在这种情况下,它会只是使用 `window.openDatabase`,意味着你必须服从 [浏览器 WebSQL 支持](http://caniuse.com/#feat=sql-storage)。 。 。 .

### 读取交易( ) vs 交易( )

两者 `readTransaction()` (只读)和 `transaction()` (已读写) 支持. `readTransaction()` 有一些小的性能优化, 所以这是值得的 如果交易中没有写入任何数据,则使用.

## 目标

这个 [WebSQL 数据库 API](https://www.w3.org/TR/webdatabase/) 已贬值 标准,但在许多情况下,重复使用遗留代码是有用的 为支持WebSQL的浏览器而设计. 还有,这让你能快点 在节点测试基于WebSQL的代码,这是方便的.

API 的目标是精确匹配已执行的现有 WebSQL API 在浏览器中。 如果浏览器之间有任何区别(例如. `rows[0]` 获得支持 在克罗姆语中,只有 `rows.item(0)` 以撒法里语为后盾,然后是最卑贱的 此库导出分母版本 .

这个库有一个强大的测试套房, 并且已知通过 PouchDB 还有测试套房.

## 非目标

这个图书馆是 _没有_ 旨在:

-   发明新的 API, 例如删除数据库, 支持 `BLOB`s,加密等.
-   在 Firefox, IE 或其他非 WebSQL 浏览器中支持 WebSQL

换句话说,目标不是携带WebSQL的火炬, 取而代之的是弥补从现有的基于WebSQL的代码到Node.js的漏洞.

## 自定义 SQLite3 绑定

此库旨在允许可互换的 SQLite3 执行, 超越 刚刚 [节点- sqlite3](https://github.com/mapbox/node-sqlite3)实例:

-   [节点-websql本身](https://github.com/nolanlawson/node-websql/blob/7c6327c2bbcf48bb0ac26f8f689206b7227baf81/lib/sqlite/SQLiteDatabase.js)
-   [Cordova SQLite 插件 2](https://github.com/nolanlawson/cordova-plugin-sqlite-2/blob/6bc32a4e71a3eea28fbc98c4da7e87c56156d094/src/javascript/SQLiteDatabase.js)
-   [反应原生 SQLite 2](https://github.com/noradaiko/react-native-sqlite-2)

要创建您的自定义执行, 请使用此 API :

```js
var customOpenDatabase = require('websql/custom');
var openDatabase = customOpenDatabase(SQLiteDatabase);
```

这个 `SQLiteDatabase` 执行需要成为构建器类功能 具有这样的构造器签名:

```js
// takes a single argument: the database name
var db = new SQLiteDatabase('dbname');
```

然后它执行一个单一功能, `exec()`,像这样:

```js
function exec(queries, readOnly, callback) {
  // queries: an array of SQL statements and queries, with a key "sql" and "args"
  // readOnly: whether or not these queries are in "read only" mode
  // callback: callback to be called with results (first arg is error, second arg is results)
}
```

以下是完整的规格:

### SQLiteDatabase( 名称( 字符串) )

构造新 `SQLiteDatbase` 对象,带有给定的字符串名称.

### 执行( 命令( 命令) ), 仅读( 布尔) , 回调( 函数)

执行列表 `SQLQuery`s. 如果我们在 `readOnly` 模式,然后是任意 无`SELECT` 询问需要不执行而丢出错误 。 此函数称为节点样式 调用错误作为第一个参数或 `Array<SQLResult>` 作为 第二个论点.

### SQL 查询

SQL 查询和绑定执行 。 这可以是普通JavaScript对象或自定义类, 只要其成员如下:

#### sql (竖起)

要执行的 SQL 查询 .

#### 参数( 箭头)

绑定查询的参数 .

例如:

```js
{
  sql: 'INSERT INTO foo values (?, ?)',
  args: ['bar', 'baz']
}
```

### SQL 结果

SQL 查询返回的结果 。 这可以是普通JavaScript对象或自定义类, 只要其成员如下:

#### 错误

一个 Java 脚本 `Error` 对象,或 `undefined` 若为 `SQLQuery` 没有出错。 若为 `error` 是事实,然后假设 `insertId`, (中文(简体) ), `rowsAffected`,以及 `rows` 确是恶行.

#### 插入Id(数目)

代表新行号的插入ID,或 `undefined` 如果没有插入任何内容.

#### 受影响的行数(数目)

受查询影响的行数, 如果无则为0 .

#### 行 (Array<对象>)

一行人回来 `SELECT` 查询,如果没有,则为空.

每个对象都是将按键(列)映射到值(取出值).

例如:

```js
{
  insertId: undefined,
  rowsAffected: 0,
  rows: [
    {'foo': 'bar'},
    {'foo': 'baz'},
  ]
}
```

或者说:

```js
{
  error: new Error('whoopsie')
}
```

例如,执行(以及本单元使用的执行) 见 `lib/sqlite/SQLiteDatabase.js`。 。 。 .

## 切换方式

版本和迁移 APIs (即说. [`changeVersion()`](https://www.w3.org/TR/webdatabase/#dom-database-changeversion)(中文(简体) ) 不支持。 拉请求欢迎!

## 限制

1.  与限制 [节点- sqlite3 API](https://github.com/mapbox/node-sqlite3/wiki/API) 在数据库名称上 (“ Valid 值是文件名 ” , “: memory : ” ) 基于匿名磁盘的数据库和一个空字符串 以及我们缺乏执行特定绘图的兴趣 荣耀 [WebSQL 光谱](https://www.w3.org/TR/webdatabase/#dom-opendatabase) 表示“包括空字符串在内的所有字符串都是有效的数据库 消费者需要使用“姓名”(而且这些姓名对案件有敏感认识) 拥有字符串映射, 以便 1 避免无效文件名出问题 关于大小写不敏感文件系统的文件名,以及至2)避免用户数据库出现 如果使用空字符串或字符串“:memory:”则给予特殊待遇; sQLite 支持的另一种特殊目的字符串形式 逃脱是 [`file::memory:...`](https://sqlite.org/inmemorydb.html) [URL( URL)](https://sqlite.org/uri.html#uri_format)。 。 。 .
    
2.  虽然WebSQL光谱和SQLite都没有谈到这个问题, `node-sqlite3` 另有以下内容: [限制](https://github.com/mapbox/node-sqlite3/wiki/API#databaseexecsql-callback) 这些声明对我们的用户来说是浮出水面的: 执行到第一个 NULL 字节和 [SQL 注释](https://sqlite.org/lang_comment.html) 会导致运行时间出错.
    

## 测试

第一个:

```
npm install
```

主测试套件 :

```
npm test
```

线条 :

```
npm run lint
```

在调试模式下进行测试( 例如使用 `node-inspector`:

```
npm run test-debug
```

在浏览器中对照 WebSQL 运行测试套件 :

```
npm run test-local
```

对 PhantomJS 进行实际- WebSQL 测试:

```
npm run test-phantom
```

## 常见问题

### @expo/websql 是什么？

网络SQL 使用 sqlite 3 为节点执行的数据库 API

### 如何安装 @expo/websql？

在项目目录运行 npm install @expo/websql，或使用 pnpm add / yarn add / bun add。

### @expo/websql 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/expo\_\_websql 是否存在。

### @expo/websql 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @expo/websql 可以商用吗？

@expo/websql 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @expo/websql 的下载量有多少？

根据 npm 官方下载统计，@expo/websql 在 2026/10/14 – 2026/11/12 这 30 天内被下载 287,224 次，日均约 9,574 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @expo/websql 还在维护吗？

最新版本 1\.0\.1 发布于 2018/05/19（8 年前）；至今共发布 2 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/05/19。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

