# 使用Claude Code构建一个 AI 增强的 MySQL 桌面客户端
在日常开发中,数据库客户端是我们最常使用的工具之一。Navicat、DBeaver、DataGrip 等工具功能强大,但有时候我们需要一个轻量、可定制的方案——既能满足日常查询需求,又能融入 AI 能力提升效率。本文将介绍一个基于 Java Swing 构建的 AI 增强数据库客户端,它虽然轻量,却涵盖了数据库管理的核心功能,并创新性地集成了自然语言转 SQL 和 SQL 优化等 AI 特性。这个
使用Claude Code构建一个 AI 增强的 MySQL 桌面客户端
文章目录
人工备注说明
- 开发工具Claude Code + (火山方舟)glm-5.1;
- 这个项目完全使用Claude Code开发,大概2小时左右完成;
- 这篇文章也是使用Claude Code编写;
- 注意:这个应用只进行简单测试,未覆盖所有场景,可能存在异常的情况,文末提供源码供学习研究!
1、前言
在日常开发中,数据库客户端是我们最常使用的工具之一。Navicat、DBeaver、DataGrip 等工具功能强大,但有时候我们需要一个轻量、可定制的方案——既能满足日常查询需求,又能融入 AI 能力提升效率。本文将介绍一个基于 Java Swing 构建的 AI 增强数据库客户端,它虽然轻量,却涵盖了数据库管理的核心功能,并创新性地集成了自然语言转 SQL 和 SQL 优化等 AI 特性。
2、项目概览
这是一个面向 MySQL 的桌面 GUI 客户端,核心定位:
- 轻量:纯 Java 桌面应用,一个 JAR 即可运行
- 实用:覆盖数据库连接、SQL 编辑、数据浏览、导入导出等日常操作
- 智能:集成兼容OpenAI API协议,支持自然语言生成 SQL 和 SQL 优化建议
3、技术栈
| 类别 | 技术选型 | 说明 |
|---|---|---|
| 语言 | Java 17 | 使用现代 Java 特性 |
| UI 框架 | Swing + FlatLaf 3.6 | FlatLaf 提供现代外观,告别原生 Swing 的年代感 |
| SQL 编辑器 | RSyntaxTextArea 3.6.0 | 语法高亮、代码折叠、自动补全 |
| 数据库驱动 | MySQL Connector/J 8.3.0 | 官方 JDBC 驱动 |
| HTTP/JSON | Hutool 5.8.44 | 轻量工具库,用于 AI API 调用 |
| AI 集成 | LangChain4j 1.12.2 | LLM 应用开发框架 |
| 数据导入导出 | Apache POI 5.2.5 | Excel 文件处理 |
| 日志 | SLF4J + Log4j 2 | 标准日志方案 |
| 构建 | Maven | 含 assembly 打包插件 |
4、架构设计
项目采用经典的分层架构,职责清晰:
┌─────────────────────────────────────────────┐
│ 表现层 (UI) │
│ MainFrame / ConnectionSessionPanel / │
│ SqlEditorPanel / DbExplorerPanel / ... │
├─────────────────────────────────────────────┤
│ 业务逻辑层 (AI Service) │
│ AiService / AiSettingsManager │
├─────────────────────────────────────────────┤
│ 数据访问层 (DB) │
│ ConnectionManager / QueryExecutor / │
│ SchemaCache / QueryHistory │
├─────────────────────────────────────────────┤
│ 数据模型层 (Model) │
│ ConnectionInfo / TableInfo / QueryResult │
├─────────────────────────────────────────────┤
│ 工具层 (Util) │
│ DataExporter / DataImporter │
└─────────────────────────────────────────────┘
4.1、设计要点
单例模式广泛使用:ConnectionManager、QueryExecutor、AiService、SchemaCache 等核心类均采用单例模式,确保资源统一管理。其中 ConnectionManager 使用 Holder 类实现懒加载,既保证线程安全又避免同步开销。
线程安全:连接存储使用 ConcurrentHashMap,历史记录使用 Collections.synchronizedList,SQL 执行支持后台线程和取消操作,保证 UI 在长时间查询时依然响应。
本地持久化:连接历史、查询历史、AI 设置等均通过 Java 序列化存储在用户目录下(~/.dbclient_*),无需额外数据库,轻量且零配置。
5、核心功能详解
5.1. 多连接多标签管理
主窗口采用多标签设计,每个标签对应一个独立的数据库连接会话:
- 左侧:数据库对象浏览器(树形结构),展示数据库、表、视图、存储过程、函数、触发器、事件
- 右侧:SQL 编辑器 + 结果面板
每个 ConnectionSessionPanel 是一个完整的工作区,互不干扰,方便同时操作多个数据库实例。
5.2. 智能数据库浏览器
树形浏览器不只是展示对象列表,它提供了丰富的右键菜单操作:
- 数据库级别:新建表、删除数据库、设为默认库
- 表级别:查看数据、查看结构、生成 SELECT/INSERT/UPDATE/DELETE 语句、清空表、删除表、导入数据
- 视图级别:查看数据、生成 SELECT、删除视图
- 列级别:复制列名
双击任意对象,名称自动插入到 SQL 编辑器中,减少手动输入。
5.3. 专业级 SQL 编辑器
SQL 编辑器是日常使用最频繁的组件,基于 RSyntaxTextArea 构建:
- 语法高亮:SQL 关键字、字符串、注释一目了然
- 代码补全:集成 SQL 关键字补全 + 数据库 Schema 补全(表名、列名),补全数据来自
SchemaCache - 快捷执行:
F5执行全部,Ctrl+Enter执行选中部分 - SQL 格式化:一键将关键字大写、添加换行缩进
- 查询历史:保存最近 1000 条查询记录,支持搜索、重新执行、复制到编辑器
5.4. 表结构查看器
以多标签页形式展示表的完整元数据:
- 列信息:列名、类型、大小、是否可空、是否主键
- 索引信息:索引名、类型、包含列、排序方式
- 外键信息:引用表和引用列
- DDL 语句:原始 CREATE TABLE 语句,语法高亮显示
5.5. 数据浏览与分页
TableDataViewerPanel 提供了分页浏览表数据的能力:
- 支持自定义每页行数(50/100/200/500)
- 首页/上一页/下一页/末页导航
- 结果表格支持排序和实时行过滤
- 右键菜单支持复制单元格、整行、整表
5.6. 数据导入导出
导出:查询结果支持三种格式导出
- CSV:UTF-8 编码,可选是否包含表头
- JSON:格式化输出,易读
- Excel (XLSX):使用
SXSSFWorkbook流式写入,支持大数据量;表头加粗,列宽自动调整
导入:支持 CSV 和 Excel 文件导入
- 列映射配置
- 可选首行作为表头
- 支持导入前清空表
- 可配置遇到错误时停止或继续
- 批量提交(可配置 batch size)
- 导入前预览前 10 行数据
- 实时进度反馈
5.7. 建表向导
可视化建表工具,无需手写 DDL:
- 填写表名和注释
- 添加列:列名、数据类型(MySQL 类型下拉选择)、大小、是否可空、是否主键、是否自增、默认值、注释
- 实时 SQL 预览
- 支持列的增删和排序
6、AI 增强功能
这是本项目最具差异化的特性。通过集成 OpenAI API协议,实现了两个核心 AI 功能:
6.1、自然语言转 SQL
在 AI 面板中用自然语言描述需求,AI 会结合当前数据库的 Schema 上下文生成对应的 SQL 语句。例如输入"查询最近7天注册的用户数量",AI 会自动生成:
SELECT COUNT(*) AS user_count
FROM users
WHERE register_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
LIMIT 100;
实现原理:
- 从
SchemaCache获取当前数据库的表结构信息 - 构建 System Prompt,包含 Schema 上下文和 SQL 生成规则(只返回 SQL、默认 LIMIT 100、关键字大写)
- 调用 OpenAI Chat API,将用户自然语言输入和 System Prompt 一起发送
- 返回纯 SQL 语句,直接插入编辑器执行
6.2、SQL 优化建议
选中一条 SQL,AI 会分析其执行逻辑并给出优化建议,例如索引推荐、查询重写等。
6.3、AI 配置
通过 AiSettingsManager 管理 API Key、Base URL 和模型选择,支持兼容 OpenAI 接口的第三方服务(如国内的 API 代理),配置持久化到本地文件。
7、关键实现细节
7.1、ConnectionManager 的线程安全设计
// Holder 类实现懒加载单例,既线程安全又无同步开销
private static class Holder {
private static final ConnectionManager INSTANCE = new ConnectionManager();
}
// ConcurrentHashMap 存储多连接
private final Map<String, ConnectionEntry> connections = new ConcurrentHashMap<>();
7.2、SchemaCache 加速自动补全
Schema 信息通过 SchemaCache 缓存,避免每次补全都查询数据库元数据。缓存以 connectionName:database 为 key,支持按需刷新和全部失效:
// 缓存结构
private final Map<String, DatabaseSchema> cache = new ConcurrentHashMap<>();
// 获取列名用于自动补全
public List<String> getColumnNames(String connectionName, String database, String tableName)
7.3、QueryExecutor 的查询取消
长时间查询不应阻塞 UI。QueryExecutor 在后台线程执行 SQL,并将活跃的 Statement 存入 Map,用户点击"停止"时调用 Statement.cancel() 中断查询:
private final Map<String, Statement> activeStatements = new ConcurrentHashMap<>();
public void cancelExecution(String queryId) {
Statement stmt = activeStatements.get(queryId);
if (stmt != null) {
stmt.cancel();
}
}
7.4、DataExporter 的大数据量处理
Excel 导出使用 SXSSFWorkbook(流式 API),数据逐行写入磁盘而非全部驻留内存,避免 OOM:
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 内存中只保留 100 行
8、本地数据持久化方案
项目选择 Java 序列化而非数据库来存储本地配置,保持零依赖:
| 文件 | 内容 |
|---|---|
~/.dbclient_history |
连接历史(主机、端口、用户名等) |
~/.dbclient_query_history |
查询历史(SQL、执行时间、结果行数) |
~/.dbclient_ai_settings |
AI 配置(API Key、Base URL、模型) |
9、构建与运行
# 编译
mvn clean compile
# 运行
mvn exec:java -Dexec.mainClass="com.penngo.dbclient.Main"
# 打包(含依赖的可执行 JAR)
mvn clean package
java -jar target/db_client-1.0-SNAPSHOT-jar-with-dependencies.jar
9.1、运行效果






10、总结
这个项目展示了如何用 Java Swing 构建一个功能完整的桌面数据库客户端,并在传统工具中融入 AI 能力。关键设计思路值得借鉴:
- 分层清晰:UI、业务、数据访问各司其职,新增功能不牵一发动全身
- 线程安全优先:Swing 应用中,数据库操作必须在后台线程,UI 更新必须在 EDT,项目中通过
SwingWorker和回调模式妥善处理 - AI 集成要带上下文:自然语言转 SQL 的关键是把数据库 Schema 作为上下文传给 LLM,而非让 AI 凭空猜测
- 大数据量友好:Excel 导出用流式 API,查询支持取消和分页,避免桌面应用的通病——卡死
如果你也在考虑为内部工具增加 AI 能力,或者需要一个轻量可定制的 MySQL 客户端,希望这个项目能给你一些启发。
更多推荐



所有评论(0)