在 IntelliJ IDEA 中运行项目时初始化数据库,通常有以下几种常见方法。以下是分步说明:
方法 1:使用 Spring Boot 的自动初始化(推荐)
适用场景:Spring Boot 项目,需在启动时自动执行 SQL 脚本。
步骤:
-
准备 SQL 脚本:
- 在
src/main/resources
目录下创建:schema.sql
:定义表结构(如CREATE TABLE
)。data.sql
:插入初始数据(如INSERT
)。
- 或使用单文件
import.sql
(Hibernate 场景)。
- 在
-
配置
application.properties
/application.yml
:# 启用自动初始化 spring.sql.init.mode=always # 指定数据源(根据实际数据库配置) spring.datasource.url=jdbc:mysql://localhost:3306/your_db spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 如果使用 JPA/Hibernate,关闭自动 DDL spring.jpa.hibernate.ddl-auto=none
-
运行项目:
- 启动 Spring Boot 主类(如
@SpringBootApplication
注解的类),数据库会自动初始化。
- 启动 Spring Boot 主类(如
方法 2:使用数据库迁移工具(Flyway/Liquibase)
适用场景:需要版本化数据库变更,适合复杂项目。
Flyway 配置步骤:
-
添加依赖(Maven):
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
-
创建迁移脚本:
- 在
src/main/resources/db/migration
目录下创建命名规范的 SQL 文件(如V1__Initial_schema.sql
)。
- 在
-
配置
application.properties
:spring.flyway.enabled=true spring.flyway.locations=classpath:db/migration spring.datasource.url=...
-
运行项目:
- Flyway 会在应用启动时自动执行未应用的迁移脚本。
方法 3:手动执行 SQL 脚本(JDBC)
适用场景:非框架项目,需在 Java 代码中手动初始化。
步骤:
-
将 SQL 脚本放入资源目录:
- 例如
src/main/resources/init.sql
。
- 例如
-
编写初始化代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.nio.file.Files; import java.nio.file.Paths; public class Main { public static void main(String[] args) { try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_db", "root", "123456"); Statement stmt = conn.createStatement()) { // 读取 SQL 文件 String sql = new String(Files.readAllBytes(Paths.get("src/main/resources/init.sql"))); // 执行脚本(需处理分号分隔) for (String query : sql.split(";")) { if (!query.trim().isEmpty()) { stmt.execute(query); } } } catch (Exception e) { e.printStackTrace(); } } }
-
运行主类:
- 直接执行
Main
类,手动触发数据库初始化。
- 直接执行
常见问题排查
-
脚本位置错误:
- Spring Boot 要求
schema.sql
或data.sql
必须位于src/main/resources
根目录。
- Spring Boot 要求
-
权限问题:
- 确保数据库用户有创建表/插入数据的权限。
-
脚本语法错误:
- 检查 SQL 语句是否兼容目标数据库(如 MySQL 和 H2 语法差异)。
-
依赖冲突:
- 如果同时使用 JPA/Hibernate,需关闭
ddl-auto
:spring.jpa.hibernate.ddl-auto=none
- 如果同时使用 JPA/Hibernate,需关闭
选择适合你项目的方法即可。如果是 Spring Boot 项目,优先推荐 方法 1 或 方法 2。