Spring Using SQL Scripts with Spring JDBC + JPA + HSQLDB (original) (raw)

Last Updated : 4 May, 2026

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.

Step-by-Step Implementation

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.

**Step 1: Add Dependencies

org.springframework.boot spring-boot-starter-web
<!-- Spring Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- HSQLDB -->
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- Flyway (Optional) -->
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

`

Step 2: Configure Application Properties

# 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

**Step 3: Create SQL Scripts

**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);

Step 4: Enable Flyway Migration

**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);

Step 5: Run the Application

Output:

**1. Book Table:

Book-table

Book table

**2. Car Table:

Car-table

Car table