JimSQL
Jim Isn't MySQL. 基于文件系统的轻量级数据库系统 (Java)。
纯 Java · 可嵌入 · 容器化 · JDBC 兼容 · MCP Ready
核心特性
文件即数据库
以 CSV 文件为基础的数据存储与访问模型,直观、可视、易于集成现有工具链。
轻量服务端
基于 Netty 的服务端,启动快、占用低,适合本地与容器环境。
JDBC 兼容
提供驱动 com.dafei1288.jimsql.jdbc,支持 PreparedStatement 参数绑定; 协议 legacy/jspv1(DML 返回值语义不同)。
SQL 引擎
- SELECT 显式投影; ORDER BY / LIMIT
- WHERE 扩展:AND/OR/NOT、()、比较、LIKE、IN、IS [NOT] NULL
- JOIN:INNER / LEFT / CROSS
- GROUP BY / HAVING + 聚合(COUNT/SUM/AVG/MIN/MAX)
DML / SHOW
- DML:INSERT / UPDATE / DELETE(CSV 后端)
- SHOW:DATABASES、TABLES、DESCRIBE、SHOW CREATE TABLE、EXPLAIN
内置 ask_llm
从 llm.csv 读取配置,可在 SQL 覆盖; 支持 OpenAI / 兼容 / Ollama; 支持 JIMSQL_LLM_DRYRUN=true 无网络演练。
MCP 集成
Spring Boot MCP Server,支持 stdio; 连接通过环境变量(JIMSQL_URL 或主机/端口/DB/用户/密码)。
容器化部署
官方镜像与 Compose 示例,一条命令即刻运行; 可通过环境变量注入运行参数。
快速开始
Docker Compose
version: '3'
services:
jimsql:
privileged: true
image: dafei1288/jimsql_server:1.0.0
ports:
- "8821:8821"
- "8825:8825"
# volumes:
# - "./data:/jimsql/data"
environment:
# JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,address=*:8825,server=y,suspend=n
JAVA_ARGS: 8821 0.0.0.0 /jimsql/data
本地运行 (JAR)
java -jar server/target/*-jar-with-dependencies.jar 8821 0.0.0.0 server/src/main/resources/datadir
MCP 集成与配置
优先使用环境变量 JIMSQL_URL。否则使用 JIMSQL_HOST/JIMSQL_PORT/JIMSQL_DB/JIMSQL_USER/JIMSQL_PASSWORD。启用 stdio:MCP_STDIO=true 或 JVM 参数 -Dmcp.stdio=true。
Windows PowerShell (stdio, granular env)
="127.0.0.1"
="8821"
="test"
=""
=""
="true"
java -jar jimsql_mcp_server\target\jimsql_mcp_server-3.3.9.jar
Windows PowerShell (stdio, single URL)
="jdbc:jimsql://127.0.0.1:8821/test"
="true"
java -jar jimsql_mcp_server\target\jimsql_mcp_server-3.3.9.jar
Bash (stdio)
JIMSQL_URL="jdbc:jimsql://127.0.0.1:8821/test" MCP_STDIO=true \
java -jar jimsql_mcp_server/target/jimsql_mcp_server-3.3.9.jar
示例 MCP 客户端配置
{
"mcpServers": {
"jimsql": {
"command": "java",
"args": ["-Dmcp.stdio=true", "-jar", "jimsql_mcp_server/target/jimsql_mcp_server-3.3.9.jar"],
"env": {
"JIMSQL_HOST": "127.0.0.1",
"JIMSQL_PORT": "8821",
"JIMSQL_DB": "test",
"JIMSQL_USER": "",
"JIMSQL_PASSWORD": ""
// or only: "JIMSQL_URL": "jdbc:jimsql://127.0.0.1:8821/test"
}
}
}
}
模块结构
common/
共享模型、元数据与工具。
server/
Netty 服务端; 包含 Dockerfile 与 docker-compose。
jdbc/
JDBC 驱动:包名 com.dafei1288.jimsql.jdbc。
jimsql_mcp_server/
Spring Boot MCP 集成,支持 stdio。
构建与测试
- 全仓构建:
mvn clean install -DskipTests - 按模块构建:
mvn -pl server -am package -DskipTests - 运行服务端 (本地 JAR):
java -jar server/target/*-jar-with-dependencies.jar 8821 0.0.0.0 server/src/main/resources/datadir - Docker 启动:
docker compose -f server/docker-compose.yml up -d - 运行测试:
mvn test; 按模块:mvn -pl jdbc test
路线图摘要
语法支持
- SELECT 增强:JOIN/WHERE/ORDER/LIMIT/UNION(部分)
- INSERT:VALUES、SELECT、SET(解析)
- 计划中:UPDATE/DELETE、严格 DDL(CREATE/ALTER/DROP)
- SHOW/DESC/EXPLAIN 变体与测试完善
执行计划
- 已实现:ORDER BY、LIMIT/OFFSET;WHERE 简单比较与扩展
- 规划:GROUP BY/HAVING(COUNT/SUM/AVG 等)
- 规划:JOIN 执行优化(更大数据量、排序/索引、RIGHT/FULL)
默认端口:8821(server)、8825(debug)。默认数据目录:server/src/main/resources/datadir。
最近更新
- SELECT 显式投影:只返回 SELECT 中点名的列;JOIN 右表列使用
别名.列标签 - WHERE 扩展:AND/OR/NOT 与括号;比较
= != > >= < <=;IS NULL/IS NOT NULL;LIKE/NOT LIKE;IN/NOT IN;列名大小写不敏感;按元数据进行数值/字符串比较 - JOIN 执行:支持
INNER/LEFT/CROSS;ON 支持等值连接(可 AND 组合);执行顺序:JOIN → WHERE → GROUP BY/HAVING → ORDER BY/LIMIT - 内置函数
ask_llm:从llm.csv读取配置,可在 SQL 覆盖;支持 OpenAI / 兼容 / 返回兼容 / Ollama;JIMSQL_LLM_DRYRUN=true支持无网络演练;日志屏蔽密钥 - 日志体系:logback;INFO 打印 SQL;DEBUG 打印计划(JOIN 键、过滤前后行数、ask_llm 参数与响应长度)
- JDBC PreparedStatement:参数绑定与
executeQuery/executeUpdate/execute - JDK 21:构建与文档统一至 JDK 21
ask_llm 示例
select ask_llm('你好,你是谁?') from llm where name='ds';
select ask_llm('你好', api_type='ollama', base_url='http://localhost:11434', model='llama3') from llm where name='local';