JDBC (Java Database Connectivity)의 정의
- 자바를 이용한 데이터베이스 접속과 SQL문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약
- 자바 프로그램내에서 SQL문을 실행하기 위한 자바 API
- SQL 과 프로그래밍 언어의 통합 접근 중 한 형태
JDBC를 이용한 데이터베이스 연결 방법
import java.sql.* -> 드라이버 로드 -> Connection객체 생성 -> Statement 객체를 생성 및 질의 수행 -> SQL문에 결과물이 있다면 ResultSet 객체 생성 -> 모든 객체 닫기
코드를 보면서 살펴보자.
인텔리제이를 실행시킨다. 이클립스에서 해도 상관없다.
자바 프로젝트를 하나 생성한다.
그리고 데이터베이스 드라이버를 임포트해야한다. 오라클을 쓸 건데 ojdbc가 필요하다. 오라클 설치폴더에 가면
C:\oracle\product\11.2.0\dbhome_1\jdbc\lib 설치를 한 루트에 가면 oracle폴더가 있을 건데 이렇게 따라가 보자.
그러면 ojdbc5가 보일 것이다. 이걸 복사해서 따로 빼놓자.
우리가 만든 인텔리제이 프로젝트에 프로젝트를 우클릭하고 Open Module Setting을 누르든지 F12를 누르면 세팅이 나온다. 거기서 상단에 + 를 클릭하고 아까 빼놓았던 드라이버를 추가하자.
그럼 이렇게 밑에 추가가된다. 그럼 코드상에서 드라이버를 로드할 수 있게 된다.
이제 코드를 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import java.sql.*; public class Main { static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } } public static void main(String[] args) { ResultSet rs = null; Connection con = null; Statement stmt = null; try { String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl"; con = DriverManager.getConnection(dbUrl, "scott", "tiger"); stmt = con.createStatement(); rs = stmt.executeQuery("SELECT ename FROM emp"); while(rs.next()) { System.out.println(rs.getString("ename")); } } catch (SQLException e) { } finally { try { rs.close(); stmt.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } | cs |
Class.forName으로 오라클 드라이버를 명시해준다. Class.forName을 쓰는 이유는 동적으로 클래스를 생성하는 목적이 있다. 그리고 DriverManager에 해당 드라이버를 등록시키는 이유도 있다. 그리고 드라이버 로딩은 프로그램 수행 시 한 번만 필요하다.
Connetion객체를 연결하는 것으로 DriverManager에 등록된 각 드라이버들을 getConnection으로 찾는다. 저기 url 오타안나게 잘 써야 한다. oracle기본 이름이 @ 앞에 나오고 로컬에서 테스트하니 주소는 로컬호스트이고 1521을 포트이고 orcl은 sid이름이다. sid이름은 오라클 설치할 때 한 이름으로 하면 된다. 그 데이터베이스 안의 유저도 당연히 있어야 겠다. 디비 유저 생성 후 테이블을 넣어놔야 한다. 이거는 미리 해놓아야 한다. 모른다면 찾아보면 기본이므로 금방 알 수 있다.
Statement는 connection으로 부터 태어난다. 이것은 쿼리를 날리기 위해서 필요하다. 작성된 결과를 돌려주게된다.
ResultSet은 이 반환된 결과들을 포인터처럼 참조해서 접근할 수 있다. next()로 계속 넘기면서 출력해보자. getString은 칼럼이름이 ename인 것들을 뽑아 내게 된다.
마지막으로 finally블럭안에서 모든 객체들을 닫아준다.
쓰고나니 별로네요..
'프로그래밍 > Database' 카테고리의 다른 글
[데이터베이스] 쿼리 최적화에 대해서 (Query Optimization) (2) | 2018.12.16 |
---|---|
[데이터베이스] 트랜잭션에 대해서 (0) | 2017.05.28 |
[오라클] DDL & DML (0) | 2017.04.09 |
[오라클] Grouping 과 Subquery (0) | 2017.03.31 |
[오라클] Join문과 Aggregation (2) | 2017.03.30 |