Java - JDBC API

김정현·2024년 5월 23일
0

JAVA

목록 보기
24/25

JDBC API

-JDBC : Java DataBase Connectivity
-API : Application Programming Interface

-자바 데이터베이스 연결 기술 명세서 - 인터페이스로 구성
-구현체는 각 DB 업체가 구성(데이터베이스 드라이버)

-java.sql 패키지 - JDBC API

순서

1. 드라이버 동적 로딩

Class.forName("oracle.jdbc.driver.OracleDriver");

2. Connection 객체 생성 : DB와 자바코드 연결

1) DriverManager
static Connection getConnection(String url, String user, String password);

url : jdbc:oracle:thin:@localhost:1521:XE

2) DataSource 인터페이스 : 커넥션 풀

3. Statement

1) 정적 SQL 실행
2) Connection
-> Statement createStatement()

-ResultSet executeQuery(String sql); -조회(SELECT)

	-ResultSet : 조회 결과 레코드 주소 :  커서 이동 다음 행을 조회
    --boolean next() : 다음 행으로 이동(다음 행이 있으면 true, 없으면 false)
    --자료형 get자료형(int 컬럼 순서번호);
    --자료형 get자료형(String 컬럼명);
  
  

-int executeUpdate(String sql);; -추가, 수정, 삭제

            -반환값: 반영된 레코드 갯수
            

4. PreparedStatement

1) 동적 SQL
2) 값을 ? 파라미터로 미리 정의, 값을 set자료형 메서드로 지정
3) Connection
-> PreparedStatement prepareStatement(String sql);
-> PreparedStatement prepareStatement(String sql, String[] columnNames);

     -> columnNames : 증감번호 기본키를 명시
     		ResultSet getGeneratedKeys()를 통해서 조회

4) 실행
ResultSet executeQuery();
int executeUpdate();

5.CallableStatement

-프로시저 호출용

oracle XE 다운

  • cmd로 다운
docker search oracle-xe

나온 목록들 중 원하는 항목

docker pull gvenzl/oracle-xe:18
docker run --name oracle-xe -d -p 1521:1521 -e ORACLE_PASSWORD=oracle gvenzl/oracle-xe:18

docker exec -it oracle-xe /bin/bash 


CREATE USER STUDY IDENTIFIED BY oracle;



GRANT CONNECT, RESOURCE TO STUDY;



ALTER USER STUDY QUOTA UNLIMITED ON USERS;

Oracle JDBC 드라이버 설치

의존성설치

ojdbc11.jar
orai18n
lombok

  • JDBC 드라이버 로딩
    -Class.forName(...) -> odjbc11.jar
    oracle.jdbc.driver.OracleDriver

데이터베이스 접속을 위한 Connection객체 생성

DriverManager : 접속을 할때마다 Connection 객체 생성 -> 효율성 X, 성능 X
.getConnection(String url, String user, String password);

DataSource 인터페이스 : 커넥션 풀을 제공하는 라이브러리 구현체가 있다. (Tomcat JDBC, HikariCP)
Connection getConnection(...)

커넥션 풀: 연결 객체 저장소 : 미리 생성해둔 객체를 저장
Tomcat JDBC
의존성 : tomcat-jdbc

HikariCP

데이터 베이스 쿼리 실행

  • Statement 객체로 데이터 접근하기

Connection
Statement createStatement();

 Statement stmt = conn.createStatement()) 

-ResultSet executeQuery(String sql)
조회를 하는 쿼리 수행 / SELECT
ResultSet : 조회한 레코드의 조회 시작 주소 값
-int executeUpdate(String sql)
변경을 가하는 쿼리 수행/ INSERT, UPDATE, DELETE
반환값 : 반영된 레코드 갯수

쿼리문 실행 결과 값 가져오기

1) ResultSet 객체의 메서드
boolean next() : 다음 행으로 이동, 다음 행이 있으면 true, 없으면 false

자료형 get자료형(int 컬럼 순서번호);
자료형 get자료형(String 컬럼명);

String getString(...) : 문자형 데이터(CHAR, VARCHAR2, CLOB ...)
int getInt(...), long getLong(...) : 정수형 데이터
float getFloat(...), double getDouble(...) : 실수형 데이터

java.sql.Time : 시간 - getTime(...)
java.sql.Date : 날짜 - getDate(...)
java.sql.Timestamp : 날짜 + 시간 - getTimestamp(...)

PreparedStatement 객체로 데이터 접근하기

1) 동적인 쿼리에 사용
2) 하나의 객체로 여러번의 쿼리를 실행 할 수 있으며, 동일한 쿼리문을 특정값만 바꾸어서 여러 번 실행해야할떄, 매개변수가 많아서 쿼리문을 정리해야할때 유용
-SQL주입을 방지

Connection
PreparedStatement prepareStatement(String sql); 

-sql 미리준비함
값이 할당될 부분은 SQL에 ?로 기입

set 자료형(int ?의 위치 번호, 값);

ResultSet executeQuery(); : SELECT
int executeUpdate(); : INSERT, UPDATE, DELETE

0개의 댓글