자바 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() ==> 하위객체를 상위 인터페이스 형변환
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
* JDBC 구현
1. DB연결
class.forName("driver")
DriverManager.getConnection
jdbc url (db종류마다 기술방법 다르다)
==> jdbc:
==> oracle:
==>thin:
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