JDBC 기초와 트랜잭션 (H2)
섹션 7진행 0 / 22
7. 정리
- JDBC 는 인터페이스입니다. 코드는
java.sql.* 만 보고, 드라이버는 ServiceLoader 가 URL 로 고릅니다. URL 만 바꾸면 다른 DB 입니다.
- 커넥션은 비쌉니다.
DataSource(풀)에서 짧게 빌리고 try-with-resources 로 반드시 반납합니다. 풀 고갈은 풀 크기가 아니라 "쥐고 있는 시간"의 문제입니다.
- 값은 항상
PreparedStatement 의 ? 로. 인젝션 방어이자 실행 계획 재사용입니다. 식별자는 화이트리스트.
ResultSet 은 커서입니다. getObject(col, LocalDate.class), getBigDecimal, 원시형 getter 뒤의 wasNull(). 대량 조회는 fetchSize 로 흘려보냅니다.
- 트랜잭션은
setAutoCommit(false) → SQL 들 → commit(), 예외면 rollback(), 반납 전 원복. 배치 04 의 begin/commit/rollback 이 정확히 이것입니다.
- 청크 커밋은
addBatch/executeBatch + 청크마다 commit(). 실패 청크는 rollback(), 부분 취소는 Savepoint.
SQLException 은 SQLState 로 분기합니다. 23xxx 는 데이터 문제, 42xxx 는 코드 문제.
- 이 레슨의
SimpleJdbc(query/update/inTransaction)가 Spring JdbcTemplate + TransactionTemplate 의 뼈대입니다. 다음 레슨(MyBatis)은 여기에 "SQL 을 어노테이션에, 결과 매핑을 선언으로" 옮깁니다.