본문 바로가기

Database

16. SQL응용(JDBC연결하기, 사용하기)

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