# BrickBear **Repository Path**: eguid/brickbear ## Basic Information - **Project Name**: BrickBear - **Description**: BrickBear(积木熊)——像搭积木一样自行扩展任意厂商数据库的数据库管理工具。 零代码方式添加数据库驱动从而扩展任意厂商数据库,万能数据库管理可视化工具,内置常见数据库驱动。 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-03 - **Last Updated**: 2026-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BrickBear(积木熊)数据库可视化工具 BrickBear(积木熊)——像搭积木一样扩展新数据库的可视化工具。 支持零代码扩展任意厂商数据库,万能数据库可视化工具。 ## 🌟 核心特性 * **🚀 零代码扩展数据库支持** * 无需重新编译或重启软件。 * 只需将新的 JDBC 驱动 Jar 包放入 `libs` 目录。 * 在界面中通过“驱动管理”面板扫描并配置,即可立即支持新数据库(如 Oracle, Dameng, GaussDB 等)。 * **🗃️ 内置常用数据库驱动** * 内置 SQLite、PostgreSQL 和 MySQL 驱动,无需手动添加。 * 自动加载内置驱动,确保连接可靠性。 * **🌳 树型目录结构** * 左侧连接列表采用树型目录展示,支持分组管理。 * 右键菜单支持:新建分组、删除分组、重命名分组、移动连接到分组、打开连接等操作。 * 连接成功后自动展开数据库列表,显示数据库节点。 * **🛠️ 自研通用连接池** * 不依赖 HikariCP 或 Commons DBCP 等第三方重型库。 * 基于 `java.sql` 标准接口实现,轻量且线程安全。 * 内置连接健康检查 (`isValid`) 和超时控制。 * **💾 本地持久化存储** * 使用 **SQLite** 存储用户配置的数据库连接信息。 * 配置文件 (`drivers.json`) 采用 JSON 格式,易于阅读和手动编辑。 * **🖥️ 直观的多标签页界面** * 左侧管理连接列表(增删改查)。 * 右侧支持多标签页同时展示多个数据库的表结构信息。 * 实时显示连接池状态(活跃/空闲连接数)。 * 一个连接同时只允许打开一个签页,自动关闭之前的签页。 * **📤 数据导入导出** * 支持导入 Excel(xls/xlsx)、XML、JSON、CSV、SQL 等格式文件。 * 支持导出数据到 Excel(xls/xlsx)、XML、JSON、CSV、SQL 等格式文件。 * 提供直观的导入导出界面,操作简单便捷。 --- ## 📂 项目结构 ```text ProjectRoot/ ├── src/ # 源代码目录 │ └── main/java/cc/eguid/tools/brickbear/ │ ├── ui/ # UI相关类 │ │ └── DatabaseToolAppUI.java │ ├── driver/ # 驱动管理 │ │ └── DynamicDriverLoader.java │ ├── pool/ # 连接池管理 │ │ ├── SimpleConnectionPool.java │ │ └── SimpleDataSource.java │ ├── config/ # 配置管理 │ │ └── ConfigManager.java │ ├── util/ # 工具类 │ └── DatabaseToolApp.java # 主类 ├── libs/ # [重要] 放置第三方 JDBC 驱动 Jar 包的目录 │ ├── sqlite-jdbc-3.45.1.0.jar (默认内置) │ └── 其他用户添加的驱动 ├── drivers.json # 驱动映射配置文件 (程序自动生成/更新) ├── connections.db # 本地存储连接信息的 SQLite 文件 (程序自动生成) ├── pom.xml # Maven 配置文件 └── README.md # 本说明文档 ``` --- ## 🛠️ 构建与运行 ### 前置要求 * **JDK**: Java 8 或更高版本 (推荐 JDK 11+) * **Maven**: 用于依赖管理 ### 1. 克隆与编译 使用 Maven 构建: ```bash # 1. 安装依赖 mvn clean install # 2. 打包 (生成 fat jar) mvn package ``` ### 2. 运行程序 ```bash # 使用 Maven 运行 mvn exec:java -Dexec.mainClass="cc.eguid.tools.brickbear.DatabaseToolApp" # 或者直接运行编译后的 fat jar java -jar target/brickbear-1.0-SNAPSHOT-jar-with-dependencies.jar ``` --- ## 🚀 使用指南 ### 1. 连接管理 #### 新建连接 1. 点击左侧树型目录空白处,右键选择 "新建连接"。 2. 在弹出的对话框中填写连接信息: * **名称**: 连接的显示名称 * **类型**: 数据库类型(如 sqlite、postgresql、mysql 等) * **主机**: 数据库服务器地址(SQLite 无需填写) * **端口**: 数据库端口(SQLite 无需填写) * **数据库**: 数据库名称 * **用户名**: 数据库用户名 * **密码**: 数据库密码 * **分组**: 可选,将连接归类到指定分组 3. 点击 "保存" 按钮,连接将显示在左侧树型目录中。 #### 管理分组 1. **新建分组**: 右键点击左侧树型目录空白处,选择 "新建分组"。 2. **删除分组**: 右键点击分组节点,选择 "删除分组"。 3. **重命名分组**: 右键点击分组节点,选择 "重命名分组"。 4. **移动连接到分组**: 右键点击连接节点,选择 "移动连接到分组",然后选择目标分组。 #### 连接数据库 1. 双击左侧树型目录中的连接节点,或右键点击连接节点并选择 "打开连接"。 2. 连接成功后,连接节点将展开,显示该连接下的数据库列表。 3. 点击数据库节点,右侧将打开该数据库的签页,显示数据库中的表结构。 ### 2. 数据操作 #### 表结构查看 1. 在右侧数据库签页中,点击 "Tables" 标签页,查看数据库中的表列表。 2. 点击表名,弹出表结构对话框,显示表的字段信息、索引信息等。 #### 数据查看与编辑 1. 在表结构对话框中,点击 "Data" 标签页,查看表中的数据。 2. 可以直接在表格中编辑数据,编辑完成后点击 "保存" 按钮提交更改。 #### 数据导入 1. 在表结构对话框的 "Data" 标签页中,点击 "Import" 按钮。 2. 选择要导入的文件格式(Excel、XML、JSON、CSV、SQL)。 3. 选择文件路径,点击 "导入" 按钮,数据将被导入到当前表中。 #### 数据导出 1. 在表结构对话框的 "Data" 标签页中,点击 "Export" 按钮。 2. 选择导出格式(Excel、XML、JSON、CSV、SQL)。 3. 选择保存路径,点击 "导出" 按钮,数据将被导出到指定文件。 ### 3. 驱动管理 #### 扫描新驱动 1. 点击顶部导航栏的 "驱动管理" 标签页。 2. 点击 "Scan 'libs' Folder" 按钮,程序将扫描 `libs` 目录中的所有 Jar 包。 #### 添加新驱动配置 1. 在驱动管理页面,点击 "Add New Driver Config" 按钮。 2. 填写以下信息: * **Type ID**: 自定义驱动标识 * **Driver Class Name**: 驱动类名 * **URL Template**: JDBC URL 模板 * **Default Port**: 默认端口 3. 点击 "Test Class" 按钮,确保驱动类能正确加载。 4. 点击 "Save & Apply" 保存配置。 --- ## ⚙️ 配置文件说明 ### `drivers.json` 定义数据库类型与驱动类的映射关系。程序启动或扫描时会自动读取。 ```json [ { "type": "sqlite", "driverClass": "org.sqlite.JDBC", "urlTemplate": "jdbc:sqlite:{database}", "defaultPort": 0 }, { "type": "postgresql", "driverClass": "org.postgresql.Driver", "urlTemplate": "jdbc:postgresql://{host}:{port}/{database}", "defaultPort": 5432 }, { "type": "mysql", "driverClass": "com.mysql.jdbc.Driver", "urlTemplate": "jdbc:mysql://{host}:{port}/{database}", "defaultPort": 3306 } ] ``` * `{host}`, `{port}`, `{database}` 是 URL 模板中的占位符,会在创建连接时自动替换。 ### `connections.db` SQLite 数据库文件,存储用户保存的连接配置(名称、类型、主机、密码等)。**注意**:密码目前以明文存储,生产环境建议加密。 --- ## 🏗️ 技术栈 * **UI Framework**: Java Swing (JDK Built-in) * **JSON Parsing**: Google Gson * **Local Storage**: SQLite (via Xerial JDBC) * **Connection Pooling**: Custom Implementation (`SimpleConnectionPool`) * **Dynamic Loading**: Java Reflection (`URLClassLoader`) * **Data Import/Export**: Apache POI (Excel), JSON, XML, CSV --- ## 📝 注意事项 1. **驱动兼容性**: 确保放入 `libs` 的 Jar 包与你想要连接的数据库版本兼容。 2. **类加载器**: 动态加载功能依赖于 `URLClassLoader`。在极度受限的安全管理器环境下可能失效,但在标准桌面环境中工作良好。 3. **密码安全**: 当前版本为了演示方便,连接密码明文存储在本地 SQLite 文件中。如需用于生产,请自行实现加密逻辑。 4. **资源释放**: 自研连接池需要手动归还连接。代码中已处理 `try-finally` 块,请勿在业务代码中直接 `conn.close()`,而应调用 `dataSource.returnConnection(conn)`。 5. **分组管理**: 新建的分组如果没有包含任何连接,重启程序后分组将不会保留。 --- ## 🤝 贡献 欢迎提交 Issue 或 Pull Request 来改进这个工具!特别是针对更多数据库类型的测试反馈。