JDBC(Java Database Connectivity)
- 관계형 데이터베이스에 저장된 데이터를 접근 및 조작할 수 있게 하는 API
- 다양한 DBMS에 대해 일관된 API로 데이터베이스 연결, 검색, 수정, 관리 등을 할 수 있게 함
* API(Application Programming Interface): 컴퓨터, 컴퓨터 프로그램을 연결하기 위한 인터페이스
- JDBC는 일관성 있는 방식으로 데이터베이스에 접근할 수 있는 API를 제공하는 클래스들이라 볼 수 있음
: 자바와 데이터베이스는 별도의 시스템이기 때문에 자바에서 제공되는 API에는 데이터베이스에 접근할 수 있는
기능을 가진 클래스들이 제공되지 않음. 그래서 자바에서 데이터베이스 작업이 필요할 때 사용할 수 있도록 하는 것
→ 자바에서 데이터베이스에 접근할 수 있게 해주는 프로그래밍 API
JDBC 구현
- JDBC 드라이버 로드 → 데이터베이스 연결 → 데이터베이스 작업 → 데이터베이스 연결 해제
JDBC 드라이버 로드
: JDBC API를 이용하여 DBMS에 접근하기 위해서는 DBMS에서 제공되는 드라이버를 설치해야 한다.
① Oracle 홈페이지에서 드라이버 다운로드
② 사용하고자 하는 프로젝트 → Bulid path → Configure Bulid Path → Libraries에서 Add External JARs.. → 드라이버 선택
③ 연결하기
① JDBC API import
② JDBC 드라이버 로드 Class.forName()
: 동적으로 JDBC 드라이브 클래스 로딩, 드라이버파일(ojdbc.jar) 내부에서 oracle.driver.OravleDriver 클래스를 찾아
있다면 힙메모리에 객체를 생성하여 DriverManager에 전달함
* ClassNorFoundException: forName()에 들어갈 정보를 잘못 작성하면 발생 → 객체를 만들 수 없기 때문에..
③ Connection 객체 생성
: 오라클 DBMS에 정상적으로 연결되었을 때 연결 정보를 보관할 객체 참조 변수 선언
④ Java프로그램에서 오라클 DBMS로 연결 시도
: DriverManager 클래스가 갖고 있는 getConnetion() 메서드 사용
getConnection() 메서드는 static 제한자를 사용하며 DriverManager 클래스 이름으로 직접 호출이 가능함
(형식)
Connection 참조변수명 = DriverManager.getConnection("오라클연결정보", "사용자계정이름", "비밀번호");
* 오라클 연결정보 예시
"jdbc:oracle:thin:@localhost:1521:xe" : localhost(지역) + host(컴퓨터) → 컴퓨터 내부에서 사용하는 주소
1521: 오라클 DBMS 전용 포트번호
xe: 오라클 DBMS 설치할 때 지정된 이름(express Edition)
⑤ 연결 완료
데이터베이스 작업
1. 데이터베이스 연결 후 실제 SQL문 수행하기 위해 Statement 객체를 생성
: 데이터베이스에 사용한 Connection 객체를 통하여 CreateStatement()메서드를 호출하여 Statement 객체를 얻어옴
→ 객체 필요 이유: SQL문 자체인 문자열을 실핼할 수 없으며 문자열을 보호하기 위하여
2. 형식
Statement 변수이름 = Connection변수이름.createStatement();
3. close(): 데이터베이스 작업이 완료되면 Statement 객체를 반환하여야 한다.
4. 예외 발생 가능성有: SQLException, try~catch 사용
예제1: newbook 테이블 사용(SELECT문)
순서
|
코드
|
설명
|
①
|
Connection con = null;
|
오라클 DBMS에 정상적으로 연결되었을 때
연결정보를 보관할 객체참조 변수 선언
|
②
|
Statement = null;
|
실행할 SQL 문장을 문자열 형식으로 보관할 객체 주소 저장할 변수
→ 모든 종류의 DML(SELECT, INSERT, UPDATE, DELETE)
|
③
|
String select =
"Select * FROM newbook"
|
실행할 SQL문장을 문자열 형식으로 보관할 변수 선언, 초기화
(만약 컬럼 하나하나 출력할 땐, desc 테이블이름 순서와 같아야 함)
|
④
|
st = con.createStatement();
|
createStatement()메서드 호출
: SQL 문장을 보관할 객체 생성(모든 DML)
|
⑤
|
ResultSet rs = null;
|
SELECT 실행할 excuteQuery()메서드 반환값을 보관할 참조변수 선언
(오라클 DBMS에서 SELECT문장을 실행하고, 결과를 보관할 인터페이스)
→ 실행결과: 행이 없거나 있음
→ 변수는 try 안으로 들어가면 try 블럭안에서만 사용 가능하니 선언 주의
|
⑥
|
rs = st.executeQuerey(SELECT);
|
SELECT문을 실행하고 실행 결과를 ResultSet 객체에 보관
→ ResultSet 인터페이스가 가리키는 객체 내부에 cursor 객체가 존재함
* cursor 객체 사용: next() 메서드 사용
* ResultSet 객체가 갖고 있는 행의 개수가 0개 이상일 수가 있기 때문에
반복문을 사용하여 출력(while문을 많이 사용: 조건문 컨트롤 용이)
|
⑦
|
while문(사진 참조)
|
int price = rs.getInt(4) → 컬럼이름 or 컬럼 순서(숫자) 사용 가능
|
⑧
|
예외처리
|
|
⑨
|
finally{
if(rs != if(rs != null) rs.close();
if(st != null) st.close();
if(con != null) con.close();
}
|
마지막으로 사용한 객체부터 close)해준다.
: 사용 완료한 객체를 heap메모리에서 제거(운영체제에게 돌려줌)
→ SQLException이 발생할 가능성 有: try~catch 사용
→ nullPointException 방지하기 위하여 if 조건문 작성
|
'Database' 카테고리의 다른 글
15. PL/SQL - 함수/프로시저/트리거 (0) | 2023.05.04 |
---|---|
14. PL/SQL - 커서 (0) | 2023.05.04 |
13. PL/SQL - 제어문 (0) | 2023.05.04 |
12. PL/SQL - SQL*Plus (0) | 2023.05.04 |
11. 그룹함수: ROLLUP/CUBE/GROUPING SET (0) | 2023.05.04 |