
1. 引言在开发 Java 应用时,我们常常会遇到这样的困扰:应用本身打包成 Jar 后可以随处运行,但数据库却需要单独安装、配置,部署环境一变就得重新折腾。尤其是交付给客户或部署到服务器时,对方环境里没有 MySQL、PostgreSQL,安装数据库又费时费力,还容易出问题。有没有办法把数据库也一并打包进 Jar 文件,让应用启动即自带数据库,无需额外安装?答案是肯定的。本文将介绍几种主流方案,并给出完整的代码示例,帮助你实现「零安装、开箱即用」的数据库体验。2. 方案概览在 Java 生态中,常见的「嵌入式数据库」方案有以下几种:方案数据库类型特点适用场景H2 Database关系型纯 Java 实现,支持内存/文件模式,兼容 MySQL 语法中小型应用、开发测试、单机部署SQLite(通过 JDBC 驱动)关系型轻量级,单文件存储,广泛用于移动端和桌面端桌面应用、嵌入式设备HSQLDB关系型纯 Java,支持内存/文件模式小型应用、单元测试Derby(JavaDB)关系型Apache 开源,纯 Java,支持嵌入式模式需要标准 SQL 的中小型应用MapDB / Chronicle Map键值型纯 Java 内存/磁盘存储缓存、配置存储、简单键值场景其中,H2 Database是最受欢迎的选择:它完全用 Java 编写,体积小、性能好,支持标准 SQL,还能以「内存模式」或「文件模式」运行。下面我们以 H2 为主,详细介绍如何将其打包进 Jar。3. 使用 H2 嵌入式数据库3.1 添加依赖如果你使用 Maven,只需在pom.xml中添加 H2 依赖:dependencygroupIdcom.h2database/groupIdartifactIdh2/artifactIdversion2.2.224/versionscoperuntime/scope/dependency如果你使用 Gradle:implementation'com.h2database:h2:2.2.224'3.2 连接方式H2 支持多种连接模式,最常用的是以下两种:内存模式:数据仅存在于内存中,应用退出后数据丢失,适合临时数据或缓存场景。Stringurl="jdbc:h2:mem:testdb";文件模式:数据持久化到本地文件,应用重启后数据仍在,适合需要持久化的场景。Stringurl="jdbc:h2:file:./data/sample";3.3 初始化数据库在应用启动时,我们可以通过执行 SQL 脚本来自动建表、初始化数据。下面是一个完整的示例:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassDatabaseInitializer{publicstaticConnectioninit()throwsException{// 使用文件模式,数据保存在当前目录下的 data 文件夹中Stringurl="jdbc:h2:file:./data/appdb";Connectionconn=DriverManager.getConnection(url,"sa"