JDBC Java Database Connectivity


15년 전으로… 순수 JDBC API

라이브러리

implementation 'org.springframework.boot:spring-boot-starter-jdbc'

스프링 부트 데이터베이스 연결 설정 추가

resources/application.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul 
spring.datasource.username=root
spring.datasource.password=12345678

기본 구성

MemberRepository interface

  • 회원의 저장 역할

JdbcMemberRepository class

  • Repository interface 의 구현체
  • 구현을 JDBC 에 구현

DataSource

private final DataSource dataSource;
public JdbcMemberRepository(DataSource dataSource) {
		this.dataSource = dataSource;
}
  • 연결 설정에서 추가 한 입력 값을 스프링을 통해서 주입
public Member save(Member member) {
		String sql = "insert into member(name) values(?)";
		Connection conn = dataSource.getConnection();
		// DB Connection 을 가지고 온다.

		PreparedStatement pstmt = conn.prepareStatement(sql);

		pstmt.setString(1, member.getName());

		pstmt.executeUpdate();

**Try-with-resources**

  • JDK 1.7 에 추가된 기능
  • try 구문에 리소스를 선언하고, 리소스를 다 사용하고 나면 자동으로 반납(close) 해주는 기능

PreparedStatement 인터페이스

SQL

INSERT INTO member VALUES (?, ?);
  • 변수보다는 상수로 빼는게 바람직 하다.

connection.prepareStatement(SQL)

PreparedStatement pstmt = connection.prepareStatement(SQL);
  • SQL 문을 데이터베이스에 보내기 위한 객체
  • PreparedStatement 객체 생성, 객체 생성시 SQL 문 저장

set(순서, 값)

pstmt.setString(1, "Lee");
pstmt.setString(2, "1234");
  • 매개변수 표시 문자 ? 에 들어갈 값 지정

executeXXX()

  • SQL 문장을 실행 후, 변경 된 row 수 정수 값으로 리턴
  • DB 에 실제 쿼리가 날라간다.

executeUpdate()

int r = pstmt.executeUpdate();
  • INSERT, UPDATE, DELETE 문에 사용

executeQuery()

int r = pstmt.excuteQuery();
  • SELECT 문에 사용

ResultSet 인터페이스

ResultSet rs = pstmt.executeQuery();
  • 결과를 받는 객체
  • SQL 결과 값의 리턴 값은 ResultSet

get()

if(rs.next()) {
		Member member = new Member(
				rs.getString("email"),
				rs.getString("password"),
				rs.getString("name")
);
profile
🧑🏻‍💻 Hello World!

0개의 댓글