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。

构建与测试

路线图摘要

语法支持

  • 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

最近更新

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';