dbx/docs/content/docs/plugins.cn.mdx

303 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: JDBC 插件
description: 安装 DBX JDBC 插件、导入数据库厂商驱动 JAR并创建 JDBC 连接。
---
DBX 默认使用 Rust 原生数据库驱动。JDBC 是可选能力:当你需要连接 DBX 暂未内置支持的数据库,或希望使用数据库厂商提供的 JDBC 驱动时,可以安装 JDBC 插件。
<Callout type="info">JDBC 插件不会打包进 DBX 主应用,也不包含任何数据库厂商的 JDBC 驱动。你需要先安装 DBX JDBC 插件,再导入对应数据库的 JDBC driver JAR。</Callout>
<Callout type="warn">“JDBC 能连接”不等于拥有原生 DBX profile 的全部能力。表树、对象源码、结构编辑、导入、传输和管理视图取决于 JDBC 元数据、识别出的实际数据库类型和驱动能力清单;未知数据库会按通用 JDBC 能力运行。</Callout>
Desktop 导入的是本机 JARDocker/Web 中 JAR 和插件安装在服务器数据目录。浏览器电脑上的本地路径不能直接交给 Web 服务器使用,迁移配置时也不会自动携带驱动文件。
## 什么时候需要 JDBC
优先使用 DBX 内置数据库类型,例如 MySQL、PostgreSQL、SQLite、Redis、MongoDB、DuckDB、ClickHouse、SQL Server、Oracle、DM、GaussDB 等。
以下情况再使用 JDBC
- 目标数据库不在 DBX 内置类型中
- 内置驱动无法满足某个厂商特性
- 你的公司统一要求使用厂商 JDBC driver
- 你想用 JDBC 连接达梦、H2、DB2、Snowflake、SQLite JDBC 等数据库
## 需要准备什么
| 项目 | 是否必需 | 说明 |
| -------------------------- | -----------: | ----------------------------------------------------------- |
| DBX JDBC 插件 | 必需 | 在 DBX 设置中一键安装,用来让 DBX 调用 JDBC |
| Java Runtime | 必需 | 本机需要能运行 `java`;建议 Java 17 或更高版本 |
| 数据库厂商 JDBC driver JAR | 必需 | 例如 PostgreSQL、MySQL、达梦、Oracle、H2、SQLite 等驱动 JAR |
| JDBC URL | 必需 | JDBC URL 通常已经包含主机、端口、数据库名和参数 |
| 用户名/密码 | 视数据库而定 | 文件型数据库或部分认证方式可能不需要 |
| 驱动类 | 通常可选 | 多数现代 JDBC 驱动可以自动注册;自动识别失败时再填写 |
## 第一步:安装 Java
JDBC 插件是 Java 程序,需要本机有 Java runtime。安装后在终端确认
```bash
java -version
```
如果系统提示找不到 `java`,需要先安装 Java。DBX 会优先使用 `JAVA_HOME`,其次尝试常见系统路径和 `PATH` 中的 `java`。
<Tabs groupId="java-install" items={['macOS', 'Windows', 'Linux']}>
<Tab value="macOS">
使用 Homebrew 安装:
```bash
brew install openjdk
```
如果 `java -version` 仍不可用,可以按 Homebrew 输出提示配置 `PATH` 或 `JAVA_HOME`。
</Tab>
<Tab value="Windows">
安装 Temurin、Oracle JDK 或 Microsoft Build of OpenJDK。安装后重新打开 DBX并确认命令行中可以运行
```powershell
java -version
```
</Tab>
<Tab value="Linux">
Debian / Ubuntu
```bash
sudo apt install openjdk-17-jre
```
Fedora
```bash
sudo dnf install java-17-openjdk
```
</Tab>
</Tabs>
## 第二步:安装 DBX JDBC 插件
在 DBX 桌面版中打开:
1. **设置**
2. **JDBC 驱动**
3. 点击 **安装 JDBC 插件**
安装成功后会显示类似:
```text
已安装v0.1.0
```
DBX JDBC 插件有自己的版本号,不会强制跟 DBX 主应用版本一致。主应用更新后不会自动安装 JDBC 插件;如果你手动卸载过,后续更新也不会自动装回来。
## 第三步:下载数据库厂商 JDBC 驱动
DBX 不会自动下载数据库厂商驱动。你需要从数据库官网或 Maven 仓库下载对应的 `.jar` 文件。
常见驱动示例:
| 数据库 | 常见 Maven Artifact | 驱动类 | JDBC URL 示例 |
| ---------- | -------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------- |
| PostgreSQL | `org.postgresql:postgresql` | `org.postgresql.Driver` | `jdbc:postgresql://localhost:5432/postgres` |
| MySQL | `com.mysql:mysql-connector-j` | `com.mysql.cj.jdbc.Driver` | `jdbc:mysql://localhost:3306/test` |
| MariaDB | `org.mariadb.jdbc:mariadb-java-client` | `org.mariadb.jdbc.Driver` | `jdbc:mariadb://localhost:3306/test` |
| 达梦 DM | `com.dameng:DmJdbcDriver8` | `dm.jdbc.driver.DmDriver` | `jdbc:dm://localhost:5236` |
| SQL Server | `com.microsoft.sqlserver:mssql-jdbc` | `com.microsoft.sqlserver.jdbc.SQLServerDriver` | `jdbc:sqlserver://localhost:1433;databaseName=master` |
| Oracle | `com.oracle.database.jdbc:ojdbc11` | `oracle.jdbc.OracleDriver` | `jdbc:oracle:thin:@//localhost:1521/ORCLPDB1` |
| H2 | `com.h2database:h2` | `org.h2.Driver` | `jdbc:h2:/tmp/dbx-h2-test` |
| SQLite | `org.xerial:sqlite-jdbc` | `org.sqlite.JDBC` | `jdbc:sqlite:/Users/me/test.db` |
| ClickHouse | `com.clickhouse:clickhouse-jdbc` | `com.clickhouse.jdbc.ClickHouseDriver` | `jdbc:clickhouse://localhost:8123/default` |
| DB2 | `com.ibm.db2:jcc` | `com.ibm.db2.jcc.DB2Driver` | `jdbc:db2://localhost:50000/SAMPLE` |
| Snowflake | `net.snowflake:snowflake-jdbc` | `net.snowflake.client.jdbc.SnowflakeDriver` | `jdbc:snowflake://account.region.snowflakecomputing.com/?db=DEMO` |
<Callout type="warn">不同数据库和驱动版本的 URL 参数可能不同。以厂商官方文档为准。如果驱动依赖多个 JAR请把需要的 JAR 路径都导入或填写进去。</Callout>
## 第四步:导入 JDBC 驱动 JAR
在 DBX 中打开:
1. **设置**
2. **JDBC 驱动**
3. 在 **JDBC 驱动 JAR** 区域点击导入按钮,选择下载好的 `.jar`
也可以直接粘贴本机 JAR 路径然后点击导入。导入后JAR 会复制到 DBX 的应用数据目录中,之后新建 JDBC 连接时可以从下拉框选择它。
导入驱动只复制文件,不会修改系统 Java、不安装数据库客户端也不会把驱动上传到远端。
## 第五步:创建 JDBC 连接
创建连接时选择 **JDBC** 类型。
| 字段 | 怎么填 |
| -------------- | --------------------------------------------------------------- |
| 名称 | 连接显示名,例如 `H2 Test`、`DM Dev`、`Oracle Dev` |
| JDBC URL | 完整 JDBC URL例如 `jdbc:postgresql://localhost:5432/postgres` |
| 用户名 | 数据库用户名;不需要认证时可以留空 |
| 密码 | 数据库密码;不需要认证时可以留空 |
| 驱动类(可选) | 自动识别失败时填写,例如 `org.postgresql.Driver` |
| 驱动 JAR | 从已导入驱动下拉框选择,或填写本机 JAR 路径 |
JDBC URL 通常已经包含主机、端口和数据库名,因此 JDBC 表单不会再单独显示主机和端口。
填写完成后点击 **测试**。测试成功后点击 **保存**,连接会出现在侧边栏中。
## 示例:连接达梦 DM
DBX 已经内置 DM ODBC 连接类型。如果你更想使用达梦官方 JDBC 驱动,可以走 JDBC 插件。
1. 安装 DBX JDBC 插件
2. 安装 Java
3. 从达梦安装目录或 Maven 仓库获取达梦 JDBC driver JAR例如 `DmJdbcDriver8.jar` 或 `DmJdbcDriver11.jar`
4. 在 **设置 → JDBC 驱动** 中导入该 JAR
5. 新建连接,选择 **JDBC**
6. 填写:
| 字段 | 值 |
| -------------- | -------------------------- |
| JDBC URL | `jdbc:dm://127.0.0.1:5236` |
| 用户名 | `SYSDBA` |
| 密码 | 你的达梦密码 |
| 驱动类(可选) | `dm.jdbc.driver.DmDriver` |
| 驱动 JAR | 选择已导入的达梦 JDBC JAR |
达梦这里建议直接填写驱动类 `dm.jdbc.driver.DmDriver`,这样不依赖驱动 JAR 的自动发现配置。
## 示例:连接 H2 本地文件数据库
H2 很适合验证 JDBC 流程。
1. 安装 DBX JDBC 插件
2. 下载 H2 JDBC driver JAR
3. 在设置中导入 `h2-*.jar`
4. 新建连接,选择 **JDBC**
5. 填写:
| 字段 | 值 |
| -------------- | -------------------------- |
| JDBC URL | `jdbc:h2:/tmp/dbx-h2-demo` |
| 用户名 | `sa` |
| 密码 | 留空 |
| 驱动类(可选) | `org.h2.Driver` |
| 驱动 JAR | 选择已导入的 H2 JAR |
保存后可以执行:
```sql
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO users VALUES (1, 'Alice');
SELECT * FROM users;
```
## 示例:连接 PostgreSQL
1. 下载 PostgreSQL JDBC driver JAR
2. 在设置中导入该 JAR
3. 新建 JDBC 连接
4. 填写:
| 字段 | 值 |
| -------------- | ------------------------------------------- |
| JDBC URL | `jdbc:postgresql://localhost:5432/postgres` |
| 用户名 | `postgres` |
| 密码 | 你的 PostgreSQL 密码 |
| 驱动类(可选) | `org.postgresql.Driver` |
| 驱动 JAR | 选择已导入的 PostgreSQL JAR |
如果数据库要求 SSL可以在 JDBC URL 后添加参数:
```text
jdbc:postgresql://localhost:5432/postgres?sslmode=require
```
## 常见问题
### 安装 JDBC 插件失败
检查网络是否能访问 DBX 的 GitHub Release。DBX 会尝试代理地址和 GitHub 原始地址,但代理站也可能不稳定。如果公司网络限制 GitHub请换网络后重试。
### 提示找不到 Java
确认终端里可以运行:
```bash
java -version
```
如果终端可用但 DBX 不可用,重启 DBX。macOS 上如果 Java 只安装在 Homebrew 路径,也可以配置 `JAVA_HOME`。
### 提示 `No JDBC driver was discovered`
说明驱动 JAR 没有被自动识别。请在 **驱动类(可选)** 中填写对应驱动类,例如:
```text
org.postgresql.Driver
com.mysql.cj.jdbc.Driver
dm.jdbc.driver.DmDriver
oracle.jdbc.OracleDriver
```
### 提示 `No suitable driver`
通常是 JDBC URL 和驱动不匹配。检查:
- 是否选择了正确数据库的 driver JAR
- JDBC URL 前缀是否正确,例如 `jdbc:postgresql:`、`jdbc:mysql:`、`jdbc:dm:`、`jdbc:oracle:`
- 是否需要填写驱动类
### 能连接但看不到表
JDBC 元数据依赖数据库驱动和账号权限。检查:
- 当前账号是否有读取 metadata 的权限
- JDBC URL 是否连接到了正确的数据库或 schema
- 表是否在不同 schema 下
- 数据库驱动是否完整支持 `DatabaseMetaData`
### 一个驱动需要多个 JAR 怎么办
在连接表单的 **驱动 JAR** 文本框中每行填写一个 JAR 路径,或在设置里分别导入多个 JAR 后选择/补充路径。
## 卸载插件
在 **设置 → JDBC 驱动** 中点击 **卸载**。卸载会移除 DBX JDBC 插件本体,但会保留你已经导入的数据库厂商 driver JAR避免下次重新安装插件时还要重新导入。
## 给开发者:插件协议
DBX 会启动插件可执行文件,并通过 stdin/stdout 发送 JSON Lines 请求与响应。连接建立后DBX 会复用同一个插件进程处理该连接上的查询和元数据请求。
插件目录需要包含 `manifest.json`
```json
{
"id": "jdbc",
"name": "DBX JDBC Plugin",
"version": "0.1.0",
"protocol_version": 1,
"description": "Adds JDBC driver support.",
"executable": "bin/dbx-jdbc-plugin",
"drivers": [
{
"id": "jdbc",
"label": "JDBC",
"kind": "external",
"database_type": "jdbc"
}
]
}
```
当前 DBX 主应用支持插件协议版本 `1`。如果插件 manifest 声明了不同协议版本DBX 会拒绝加载;每次插件请求也有 30 秒超时,避免驱动进程卡住后无限阻塞应用。
第一版协议支持 `testConnection`、`connect`、`executeQuery`、`listDatabases`、`listSchemas`、`listTables` 和 `getColumns`。
<Callout type="info">JDBC 连接配置会保存 `jdbc_driver_class` 和 `jdbc_driver_paths`。如果一个驱动需要多个 JAR请把所有路径都绑定到连接上这样元数据和查询调用会使用同一套 classpath。</Callout>