交互式终端 SQL 客户端,用于在 Linux 服务器上快速查询 Oracle、达梦(DM)和 KingbaseES 数据库。
- JDK 8 或更高版本
- 支持 Oracle、达梦和 KingbaseES 数据库
mvn clean package构建产物位于 target/sql-client-1.0.0.jar(约 7.4MB 的 Fat JAR,包含所有依赖)。
将 config-example.yaml 复制为 config.yaml,填入实际的数据库连接信息:
connections:
- name: prod-oracle
type: ORACLE
url: jdbc:oracle:thin:@192.168.1.100:1521:orcl
username: scott
password: tiger
- name: dev-dm
type: DM
url: jdbc:dm://192.168.1.200:5236
username: SYSDBA
password: SYSDBA
defaultConnection: dev-dm字段说明:
| 字段 | 说明 |
|---|---|
name |
连接名称,用于 \switch 切换时的标识 |
type |
数据库类型,可选值:ORACLE、DM、KINGBASE8 |
url |
JDBC 连接地址 |
username |
数据库用户名 |
password |
数据库密码 |
defaultConnection |
启动时自动连接的默认连接名称(可选,不填则连接第一个) |
# 使用配置文件启动
java -jar sql-client.jar -c config.yaml
# 使用命令行参数直连(无需配置文件)
java -jar sql-client.jar -url jdbc:oracle:thin:@host:1521:orcl -user scott -pass tiger
java -jar sql-client.jar -url jdbc:dm://host:5236 -user SYSDBA -pass SYSDBA -type DM
java -jar sql-client.jar -url jdbc:kingbase8://host:54321/db -user SYSTEM -pass password -type KINGBASE8
# 指定配置文件 + 覆盖连接
java -jar sql-client.jar -c config.yaml -url jdbc:dm://another-host:5236 -user admin -pass admin123命令行参数:
| 参数 | 说明 |
|---|---|
-c <file> |
配置文件路径 |
-url <url> |
JDBC 连接地址(自动识别数据库类型) |
-user <user> |
数据库用户名 |
-pass <pass> |
数据库密码 |
-type <type> |
数据库类型:ORACLE、DM 或 KINGBASE8(使用 -url 时可省略,自动识别) |
输入 SQL 语句,以**分号(;)**结尾执行:
[dev-dm]> SELECT * FROM SYS_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND ROWNUM <= 5;
+--------+-------------+-------------+
| ID | NAME | OBJECT_TYPE |
+--------+-------------+-------------+
| 100 | SYS_TABLES | TABLE |
| 101 | SYS_VIEWS | TABLE |
| 102 | USER_INFO | TABLE |
| 103 | ORDER_LOG | TABLE |
| 104 | CONFIG_DATA | TABLE |
+--------+-------------+-------------+
5 row(s) in set (23 ms)
SQL 可以跨多行输入,以分号结尾时执行。出现 -> 提示符表示正在输入多行语句:
[dev-dm]> SELECT ID, NAME
-> FROM USER_INFO
-> WHERE STATUS = 'ACTIVE'
-> ORDER BY ID DESC
-> LIMIT 10;
按 Ctrl+C 可取消当前正在输入的 SQL。
支持 INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、TRUNCATE 等语句:
[dev-dm]> INSERT INTO TEST_TABLE VALUES (1, 'test');
1 row(s) affected.
[dev-dm]> UPDATE TEST_TABLE SET NAME = 'updated' WHERE ID = 1;
1 row(s) affected.
| 命令 | 说明 |
|---|---|
\help |
显示帮助信息 |
\connections |
列出所有已配置的数据库连接(* 标记当前连接) |
\switch <name> |
切换到指定名称的数据库连接 |
\current |
显示当前连接详细信息(状态、Catalog、Schema) |
\reconnect |
重新连接当前数据库 |
\quit 或 \exit |
退出客户端 |
使用示例:
[dev-dm]> \connections
* dev-dm (DM) -> jdbc:dm://192.168.1.200:5236
prod-oracle (ORACLE) -> jdbc:oracle:thin:@192.168.1.100:1521:orcl
[dev-dm]> \switch prod-oracle
Connecting to prod-oracle...
Connected to prod-oracle (ORACLE) -> jdbc:oracle:thin:@192.168.1.100:1521:orcl successfully.
[prod-oracle]> \current
Current connection: prod-oracle (ORACLE) -> jdbc:oracle:thin:@192.168.1.100:1521:orcl
Status: connected
Catalog: ORCL
Schema: SCOTT
客户端自动保存输入历史到 ~/.sqlclient-history,支持:
- 上/下方向键浏览历史 SQL
- 跨会话持久化(重启后历史仍在)
- 自动对齐 — 列宽根据内容和列名自动计算
- NULL 处理 — 空值显示为
NULL - 超长截断 — 超过 50 字符的字段自动截断,末尾显示
... - 换行合并 — 包含换行的字段内容合并为单行显示
- 行数统计 — 底部显示返回行数和执行耗时
- 空结果集 — 无数据时显示
Empty set
Oracle:
# 传统格式
jdbc:oracle:thin:@<host>:<port>:<SID>
# 服务名格式
jdbc:oracle:thin:@//<host>:<port>/<service_name>
# 示例
jdbc:oracle:thin:@192.168.1.100:1521:orcl
jdbc:oracle:thin:@//192.168.1.100:1521/orclpdb
达梦:
jdbc:dm://<host>:<port>
# 指定 schema
jdbc:dm://<host>:<port>?schema=<schema_name>
# 示例
jdbc:dm://192.168.1.200:5236
jdbc:dm://192.168.1.200:5236?schema=TEST_SCHEMA
KingbaseES:
jdbc:kingbase8://<host>:<port>/<database>
# 示例
jdbc:kingbase8://192.168.1.300:54321/mydb
# 克隆项目后执行
mvn clean package
# 运行测试
mvn test
# 仅编译不打包
mvn compile构建要求:Maven 3.6+、JDK 8+。
- 配置文件中密码为明文存储,请注意文件权限控制(
chmod 600 config.yaml) - 单次查询最多返回 500 行,避免大量数据导致终端卡顿
- 长时间空闲可能导致数据库连接超时,使用
\reconnect重新连接 - 不支持事务管理,每条 SQL 独立执行并自动提交