JDBC API
-JDBC : Java DataBase Connectivity
-API : Application Programming Interface
-자바 데이터베이스 연결 기술 명세서 - 인터페이스로 구성
-구현체는 각 DB 업체가 구성(데이터베이스 드라이버)
-java.sql 패키지 - JDBC API
Class.forName("oracle.jdbc.driver.OracleDriver");
1) DriverManager
static Connection getConnection(String url, String user, String password);
url : jdbc:oracle:thin:@localhost:1521:XE
2) DataSource 인터페이스 : 커넥션 풀
1) 정적 SQL 실행
2) Connection
-> Statement createStatement()
-ResultSet executeQuery(String sql); -조회(SELECT)
-ResultSet : 조회 결과 레코드 주소 : 커서 이동 다음 행을 조회
--boolean next() : 다음 행으로 이동(다음 행이 있으면 true, 없으면 false)
--자료형 get자료형(int 컬럼 순서번호);
--자료형 get자료형(String 컬럼명);
-int executeUpdate(String sql);; -추가, 수정, 삭제
-반환값: 반영된 레코드 갯수
1) 동적 SQL
2) 값을 ? 파라미터로 미리 정의, 값을 set자료형 메서드로 지정
3) Connection
-> PreparedStatement prepareStatement(String sql);
-> PreparedStatement prepareStatement(String sql, String[] columnNames);
-> columnNames : 증감번호 기본키를 명시
ResultSet getGeneratedKeys()를 통해서 조회
4) 실행
ResultSet executeQuery();
int executeUpdate();
-프로시저 호출용
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;
ojdbc11.jar
orai18n
lombok
DriverManager : 접속을 할때마다 Connection 객체 생성 -> 효율성 X, 성능 X
.getConnection(String url, String user, String password);
DataSource 인터페이스 : 커넥션 풀을 제공하는 라이브러리 구현체가 있다. (Tomcat JDBC, HikariCP)
Connection getConnection(...)
커넥션 풀: 연결 객체 저장소 : 미리 생성해둔 객체를 저장
Tomcat JDBC
의존성 : tomcat-jdbc
HikariCP
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(...)
1) 동적인 쿼리에 사용
2) 하나의 객체로 여러번의 쿼리를 실행 할 수 있으며, 동일한 쿼리문을 특정값만 바꾸어서 여러 번 실행해야할떄, 매개변수가 많아서 쿼리문을 정리해야할때 유용
-SQL주입을 방지
Connection
PreparedStatement prepareStatement(String sql);
-sql 미리준비함
값이 할당될 부분은 SQL에 ?로 기입
set 자료형(int ?의 위치 번호, 값);
ResultSet executeQuery(); : SELECT
int executeUpdate(); : INSERT, UPDATE, DELETE