ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 베이스 식별을 위한JDBC URL
    Data Base/MySQL 2007. 11. 23. 15:20

    각각의 웹 사이트를 구분할 때 우니른 htt://www.xx.xx, 또는 http://xx.xx와 같은 URL을 사용한다.
    이와 비슷하게, 데이터 베이스를 구분할 때에도 URL과 비슷한 형식을 취하는데 JDBC URL을 사용한다.

    JDBC URL은 사용하는 JDBC 드라이버에 따라서 표현하는 방식에 차이가 나는데 일반적인 형식은 다음과 같다.
    jdbc:[DBMS]:[데이터베이스 식별자]

    MySQL JDBC 드라이버인 MySQL Connector 의 경우  다음과 같은 JDBC URL을 사용한다.

    jdbc:mysql://HOST[:PORT]/DBNAME[?param=value&param1=value2&...]

    여기서 [HOST]는 MySQL 서버의 호스트 주소를 나타내며, [DBNAME]은 데이터 베이스의 이름을 나타낸다. [PORT]는 MySQL 서버가 사용하는 포트 번호를 나타낸다. JDBC URL 뒤에 몇가지 설정 정보를 추가할 수 있으며, 표현 방식은 파라미터와 동일하다.

    예를 들어, 로컬 서버에서 실행중인 MySQL 서버의 chap11 데이터베이스를 나타낼 때에는 다음과 같은 JDBC URL을 사용하면 된다.

    jdbc:mysql://localhost:3306/chap11

    MySQL JDBC 드라이버에서 한글을 올바르게 처리해 주려면 JDBC URL 뒤에 다음과 같이 두개의 파라미터를 추가해 주어야 한다.

    jdbc:mysql://localhost:3306/chap11?useUnicode=true&characterEncoding=euc-kr

    오라클에서 제공하는 JDBC 드라이버의 경우에는 다음과 같은 형식의 JDBC URL을 사용한다.

    jdbc:oracle:thin:@HOST:PORT:SID

    여기서, HOST,PORT는 각각 오라클이 설치된 호스트의 주소와 포트 번호를 나타내며,SID는 사용할 데이터 베이스의 SID를 나타낸다. 예를 들어, 로컬 서버에 설치된 오라클 SID가 ORCL인 데이터 베이스에 접근할 때에는 다음과 같은 JDBC URL을 사용한다.

    jdbc:oralce:thin:@172.0.0.1:1521:ORCL

    오라클은 서버의 1521 포트를 사용한다.


    데이터 베이스 커넥션

    데이터 베이스 프로그래밍을 하기 위해서는 먼저 데이터베이스와 연결된 커넥션을 구해야 한다. java.sql.Connection 클레스가 데이터베이스 커넥션을 나타내며,
    커넥션은 Java.sql.DriverManager클레스가 제공하는
    getConnection() 메소드를 사용해서 구할수 있다.
    DriverManager 클레스는 다음과 같은 두개의 getConnection()메소드를 제공하고 있다.

    ㆍDriverManager.getConnection(String jdbcURL)
    ㆍDriverManager.getConnection(String jdbcURL,String user,String password)

    getConnection() 메소드의 jdbcURL은 데이터베이스에 연결할 때 사용할 JDBC URL을 나타낸다.
    user와 password는 데이터베이스의 계정과 암호를 나타낸다.

    JDBC URL과 데이터베이스 사용자 계정/아이디를 올바르게 지정했다면, DriverManager.getConnection() 메소드는 Connection 객체를 리턴한다.
    이 Connection 객체를 사용해서 필요한 작업을 시작할 수 있다.

    DriverManager.getConnection() 메소드는 Connection 객체를 생성하지 못하면
    SQLException 예외를 발생시킨다. 따라서 getConnection() 메소드를 사용할 때에는
    다음과 같이 try-catch 블록을 사용해서 SQLException에 대한 예외 처리를 해주어야 한다.

    Connection conn=null;
    try{
        conn = DriverManager.getConnection(...);
        ...
    }catch(SQLException ex){
        ...//예외 처리
    }


    Connection 객체를 다 사용한 뒤에는 Close()메소드를 호출하여
    Connection 객체가 사용한 시스템 자원을 반환 해 주어야 한다.
    그렇지 않을 경우 시스템 자원이 낭비되어서 커넥션을 구할 수 없는 상태가 될 수도 있다.

    Connection conn = null;

    try{
        String jdbcDriver = "jdbc:mysql://localhost:3306/chap11?"+
                                   "useUnicode=true&charsetEncoding=euc-kr";
        String dbUser = "jspexam";
        String dbPass = "jspex";

        conn = DriverManager.getConnection(jdbc,dbUser,dbPass);

    }catch(SQLException ex){
        //에러 발생
    }finally{
        if(conn != null) try {conn.close();}catch(SQLException ex){}
    }

    위의 코드를 보면 finally 블록에서 Connection 객체의 clise() 메소드를 호출해서
    사용한 자원을 반환한다. DriverManager.getConnection() 메소드가 예외를 발생시킬 경우
    conn 에는 Connection 객체가 할당되지 않으므로, null인지의 여부를 판단한 후에
    close()메소드를 호출해 주어야 한다.

    Statement를 사용한 쿼리 실행

    Connection 객체를 생성한 후에는 Connection 으로부터 Statement를 생성한 뒤에 쿼리를 실행 할 수 있다. Statement는 다음과 같이 Connection.createStatement() 메소드를 사용하여 생성 할 수 있다.

    Statement stmt = conn.createStatement();

    위와 같이 Statement 클레스를 생성한 다음에는 다음의 두 메소드를 사용해서 쿼리를 실행 할 수 있다.

    ㆍResultSet executeQuery(String query) - Select 쿼리를 실행한다.
    ㆍint executeUpdate(String query) - INSERT,UPDATE,DELETE 쿼리를 실행한다.

    executeQuery 메소드는 Select 쿼리의 결과 값을 java.sql.ResultSet 객체에 저장해서 리턴한다.
    두번째 executeUpdate() 메소드는 IMSERT,UPDATE,DELETE 쿼리를 실행하고, 그 결과로 변경된 레코드의 개수를 리턴한다.
Designed by Tistory.