Lab 10: JDBC & SQLite

Objective

Use JDBC with SQLite to build a transactional product/order system: schema creation, parameterized PreparedStatement, batch inserts, transactions with rollback, JOIN queries, aggregate SQL, and a simple Repository pattern.

Background

JDBC (Java Database Connectivity) is Java's standard API for relational database access. PreparedStatement prevents SQL injection by separating SQL structure from data. Transactions (setAutoCommit(false) + commit()/rollback()) ensure atomicity — either all operations in a unit succeed, or none do.

Time

30 minutes

Prerequisites

  • Lab 09 (Testing)

Tools

  • Docker: zchencow/innozverse-java:latest

  • SQLite JDBC (downloaded via Maven during lab)


Lab Instructions

Steps 1–8: Schema, batch insert, transactional order, JOIN query, aggregate SQL, Repository, rollback, Capstone

💡 Always use PreparedStatement, never Statement with string concatenation. PreparedStatement sends the SQL structure to the database driver separately from the data values, so user-supplied data can never be interpreted as SQL commands. conn.prepareStatement("... WHERE id=?") followed by ps.setInt(1, id) is the correct pattern — the ? is a placeholder, not string substitution.

📸 Verified Output:


Summary

JDBC concept
API

Connect

DriverManager.getConnection(url)

Create statement

conn.prepareStatement(sql)

Set parameters

ps.setInt(1, val), ps.setString(2, val)

Execute query

ps.executeQuery()ResultSet

Execute update

ps.executeUpdate() → rows affected

Batch insert

ps.addBatch() + ps.executeBatch()

Transaction

setAutoCommit(false) + commit()/rollback()

Further Reading

Last updated