JDBC란?
ㄱ. Java Data Base Connectivity
ㄴ. 자바 표준 인터페이스 - DBMS 연동 + 작업(CRUD)
ㄷ. DataBase 연동 기술
2. Java 응용 프로그램 + 오라클 DBMS 연동
JDBC
ㄱ. 오라클사에서 JDBC을 구현 드라이버(driver)가 OracleDriver 다운받아야된다.
ㄴ. ojdbc6.jar 파일이 OracleDriver이다.
3. JDBC Driver?
MySQL
MS SQL
Oracle
같은(하나의) 오라클을 연결하더라도 여러가지의 방법이 있다는 소리이다.
==>JDBC DRIVER의 종류
4.JDBC Driver의 종류
ㄱ. Type1- ODBC Driver
ㄴ. Type2 - Native Library C C++로 마든 라이브러리로 연동
ㄷ. Type3 - 미들웨어 서버
ㄹ. **중요**Type4 - Thin 드라이버, 순수 자바 만들어짐 DBMS 직접연결, 가장많이 사용
DBMS(Connection)에 연결하는 순서
**중요 암기!! EX02 자바파일
1) Class.forName()으로 드라이버(JDBC DRIVER) 로딩
2) DriverManager 클래스의 getConnection() 메서드를 사용해서 Connection 객체를 얻어온다.
어떤 DB서버 연결
어떤 계정 비밀번호
포트번호
등등
3) 필요한(질의 응답) 작업 - CRUD 작업
4) 연결 종료 (Connection 객체 close())
public class Ex02 {
public static void main(String[] args) {
//연결문자열
String url = "jdbc:oracle:thin:@localhost:1521:xe"; //여기서 .이 아니라 :이다.
String user = "SCOTT";
String password = "tiger"; //비밀번호 대소문자 구분한다.
try {
//1.Class.forName() JDBC 드라이버로 로딩하는 작업
// jdbcPro 자바 프로젝트 안에 ojdbc6.jar 참조
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DriverManager.getConnecton()로 connection객체를 얻어온다.
Connection conn = DriverManager.getConnection(url,user,password);
//3.필요한 작업(CRUD) --> 생략가능
System.out.println(conn);
System.out.println(conn.isClosed()); //boolean [false]/true
//4.연결종료
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("END");
}//main
}//class
Stament
다리역할, 일꾼 역할이라고 생각하면된다.
Cnnection 객체인 conn를 사용해서 생성한다.
ㄱ. Stament 기본객체
ㄴ. PreparedStatement ? 바인딩 변수를 사용해서 쿼리 실행 객체
ㄷ. CallableStatement 저장 프로시저를 호출해서 쿼리 실행 객체
예시
DB 연동하고 + 조회작업
Statement stmt객체 사용해서 DB 연동하고 조회작업 해보기
public class Ex03 {
public static void main(String[] args) {
//DB연동
String className="oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe"; //여기서 .이 아니라 :이다.
String user = "SCOTT";
String password = "tiger"; //비밀번호 대소문자 구분한다.
Connection conn = null;
String sql = "SELECT * FROM dept";
Statement stmt = null;
try {
//1. Class.forName() JDBC Driver 로딩 + (ojdbc6.jar참조)
Class.forName(className);
//2.DriverManager.getConnection() 커넥션 객체를 얻어온다. + 문자열(url,user,password)
conn = DriverManager.getConnection(url, user, password);
//3.필요한 작업 - CRUD
/* 칼럼 조회하는 작업(읽는작업)
true rs.next() --> 10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
70 QC
80 QC
*/
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql); //SELECT (DQL)문 암기
//stmt.executeUpdate(sql); // INSERT,UPDATE,DELETE (DML)문 암기
if(rs.next( )) { //boolean rs.next() 리절트 셋 안에 다음 레코드 값 있니? true/false
//다음(next) 레코드를 읽어와서 출력
int deptno = rs.getInt(1);
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.printf("%d\t%s\t%s\n",deptno,dname,loc);
}else {
System.out.println("읽을 레코드가 없습니다.");
}
if(rs.next( )) { //boolean rs.next() 리절트 셋 안에 다음 레코드 값 있니? true/false
//다음(next) 레코드를 읽어와서 출력
int deptno = rs.getInt(1);
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.printf("%d\t%s\t%s\n",deptno,dname,loc);
}else {
System.out.println("읽을 레코드가 없습니다.");
}
if(rs.next( )) { //boolean rs.next() 리절트 셋 안에 다음 레코드 값 있니? true/false
//다음(next) 레코드를 읽어와서 출력
int deptno = rs.getInt(1);
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.printf("%d\t%s\t%s\n",deptno,dname,loc);
}else {
System.out.println("읽을 레코드가 없습니다.");
}
:
:
위의 코딩을 계속 반복하는것이다.
:
:
//4.close
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("=END=");
}//main
}//class
위의 반복되는 부분을 while문으로 표현하면 다음과 같다.
public class Ex03_02 {
public static void main(String[] args) {
//DB연동
String className="oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "SCOTT";
String password = "tiger";
Connection conn = null;
Statement stmt = null;
String sql = "SELECT * FROM dept WHERE deptno = 90";
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()) {
do {
int deptno = rs.getInt(1);
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.printf("%d\t%s\t%s\n",deptno,dname,loc);
}while(rs.next());
} else {
System.out.println("결과물이 없습니다.");
}
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("=END=");
}//main
}//class