![]() |
VOOZH | about |
SQL scripts with Spring JDBC and JPA allows developers to automatically initialize and populate the database during application startup. With HSQLDB, an in-memory database, this setup becomes lightweight and ideal for testing and development. Spring simplifies this process by executing schema and data scripts without requiring manual intervention.
This section explains how to configure SQL scripts and integrate Spring JDBC, JPA, and HSQLDB to automatically create and populate the database during application startup.
# HSQLDB configuration
spring.datasource.url=jdbc:hsqldb:mem:testdb
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.username=sa
spring.datasource.password=# Enable SQL initialization (Spring Boot 2.5+)
spring.sql.init.mode=always
# JPA settings
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true# Flyway (optional)
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
schema.sql
// -- schema.sql
CREATE TABLE car (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
price INT
);
CREATE TABLE book (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name VARCHAR(255), price INT );
-- Creating book table
CREATE TABLE book (
id INT IDENTITY PRIMARY KEY,
name VARCHAR(255),
price INT
);
data.sql
-- Insert data into car table
INSERT INTO car (id, name, price) VALUES (DEFAULT, 'Audi', 3000000);
INSERT INTO car (id, name, price) VALUES (DEFAULT, 'BMW', 4000000);
INSERT INTO car (id, name, price) VALUES (DEFAULT, 'Jaguar', 3500000);
-- Insert data into book table
INSERT INTO book (id, name, price) VALUES (DEFAULT, 'Book-1', 600);
INSERT INTO book (id, name, price) VALUES (DEFAULT, 'Book-2', 500);
INSERT INTO book (id, name, price) VALUES (DEFAULT, 'Book-3', 800);
V1_create_schema.sql
-- V1__create_schema.sql
CREATE TABLE car (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
price INT
);
CREATE TABLE book (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
price INT
);
V2_insert_data.sql
-- V2__insert_data.sql
INSERT INTO car (name, price) VALUES ('Audi', 3000000);
INSERT INTO car (name, price) VALUES ('BMW', 4000000);
INSERT INTO car (name, price) VALUES ('Jaguar', 3500000);
INSERT INTO book (name, price) VALUES ('Book-1', 600);
INSERT INTO book (name, price) VALUES ('Book-2', 500);
INSERT INTO book (name, price) VALUES ('Book-3', 800);
1. Book Table:
2. Car Table: