본문 바로가기

콩's EDUCATION/콩's JAVA

[KITRI] 자바 JDBC

자바 JDBC


 

* JDBC란

 

자바 프로그램에서 데이터베이스 이용할 수 있도록 도와주는 API 모음

java database CONNECTIVITY

java.sql 패키지(javax.sql) 여러 api 사용

 

자바 프로그램 <=========> java.ip 패키지 (파일 입출력)

DB : SQL : 테이블 데이터

1. DB연결(conn; ip, prot, id, password..)

==> java.sql.Connection

==> DB종류(Oracle, MYSQL, MSSQL)마다 구현이 다르다.

2. sql 전송

==> java.sql.Statement / java.sql.PreparedStatement

3. sql 결과 검색

==> java.sql.ResultSet

4. db 연결해제

==> java.sql.Connection

 

자바 프로그램 1개만 작성 --> 연결 데이터베이스마다 구현 다르다.

연결 데이터베이스마다 반드시 구현

연결 데이터베이스 종류 여러개

 

1. DB 독립적

 

interface Connection{
connect();

}  ==> 자바 개발자 api (각 DB회사 반드시 구현 약속)

clss OracleConnection implements Connection{

connect() {

오라클 연결 library 호출 문장

}

 

clss MySqlConnection implements Connection{

connect() {

Mysql 연결 library 호출 문장

}

 

* 프로그램 오라클 연결

 

Connection con = new Connection() ==> 에러

 

Connection con = new OracleConnection()

==> 하위객체를 상위 인터페이스 형변환

con.connect(); ==> 오라클 연결

 

Connection con = new Connection() ==> 에러

 

Connection con = new MysqlConnection()

==> 하위객체를 상위 인터페이스 형변환

con.connect(); ==> Mysql 연결

 

Connection interface ; api

OracleConnectin class ; oracle 사 구현

SQLServerConnectin class ; ms 사 구현

 

cf. abstarcct / interface

 

abstract class / interface

===> 구현되지 않은 메소드를 가진다.

실제 구현 내용이 어떤 클래스일지에 따라서 다르다.

 

abstract class Shape{

면접();

}

==> 서로 다른 여러개의 클래스에 공통적으로 정의해야할 스펙 명세서

 

interface ; 모든 메소드가 abstract 선언해야한다.

==> 다중상속을 하는 것이 특징이다.

 

jdbc program

1. 순서 구현

java.sql.인터페이스

oracle 10g jdbc driver

oracle 10g db (포함)

 

jdbc driver

 

1. 환경변수 classpath: c:.../ojdbc14.jar 등록

(jvm 오라클 jdbc driver 경로 알려줌)

2. c:program files\java\jre6\lib\ext\ojdbc14.jar 복사

==> 1번 세팅하면 컴퓨터 모든 프로젝트에서 사용 가능하다.

3. 이클립스 프로젝트 - property - java build path -

library - c:oracleXE.../ojdc.jar 등록

4. jsp/servlet c:...\tomcat\lib\c:...\ojdbc4.jar 등록

 

C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib

 

ojdbc14.jar

 

 

ojdbc14.jar

 

* JDBC 구현

 

1. DB연결

class.forName("driver")

DriverManager.getConnection

 

jdbc url (db종류마다 기술방법 다르다)

==> jdbc:

==> oracle:

==>thin:

==> @192.168.103.157:xe"

 

id==>"hr"

pass==>"hr"

 

* jdbc 연결 해제

 

con.close()

try-catch-finally

 

* sql 전송 / sql 결과 검색

 

자바 사용자 명령어 입력

명령어 : create

테이블 명 : emp

==> create table emp(id number(4), ....)

==> 자바 sql 완성

==> 자바 sql 전송

 

자바  ; java.sql.Statement(인터페이스)

 

sql 생성 ;

String sql = "select.../insert";

 

sql 전송/결과;

Statement st = con.createStatement();

ResultSet 테이블 = st.executeQuery("select")

int 변화 행의 갯수 = st.executeUpdate("insert/delete/update")

 

Statement ---> PreparedStatement

 

DB 변화 있는 SQL

 

DDL : 테이블 생성 / 구조변경 / 삭제

DML : 데이터 삽입 / 삭제 / 수정

DCL : admin 사용자 권한 추가 / 회수

==> Statement

int 0, 1... = executeUpdate();

TCL : commit, rollback

트랜잭션 변화 db 영구적 반영

==> dml; sql plus 실행하면 수동

commit/rollback

 

dml ; jdbc 실행하면

기본모드는 자동 commit (rollback 불가능)

기본모드 변경 가능, 수동 commit / rollback

 

Connection con = D......

기본  --> con.setAutoCommit(true);

수동변경 --> con.setAutoCommit(false);

insert/delete

con.commit() / con.rollback() 두개중 하나 실행

 

DB 변화 없는 SQL ; 조회

SELECT

string selectSQL = "SELECT abc FROM emp";

Statement st = con.createStatement();

ResultSet rs = st.executeQuery(selectSQL);

rs.next

100         이자바             56000.00

정수         문자열             실수

number(n)    varchar2('')     number

getInt(1)    getString(2)

또는          또는

 

rs.next 메소드 다음 레코드(행) 이동하면

레코드 존재 : true

레코드 존재 x : false

 

ResultSet 내부 레코드 존재하는 만큼 반복한다.

while(rs.next()== true){

rs.getInt(1);

rs.getString("B");

rs.getDouble(3);

}

 

"insert int o emp values('"+args[0]+"'," => 헷갈리는 경우가 많다.

 

단일 따옴표 생략

 

자바 프로그램

st = con.createStatement();

rs = st.executeQuery

("select from emp where id = 100")

while(rs.next()){

....

}

rs = st.executeQuery

("selec from emp where id = 200")

while(rs.next()){

....

}

 

statment sql 전송

Preparedstatment 동일한 sql 반복전송할때 주로 사용한다.

setInt/setString/setDouble