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

 

 

복사했습니다!