날아라쩡글이의 블로그입니다.

자바와 연동하는 방법(JDBC), 자바 ConnectionUtil 생성 방법 본문

중앙 HTA (2106기) story/JDBC story

자바와 연동하는 방법(JDBC), 자바 ConnectionUtil 생성 방법

날아라쩡글이 2021. 10. 20. 21:14
반응형

JDBC

  • Java DataBase Connectivity
  • 자바가 DB에 접속해서 SQL을 실행할 수 있도록 하는 표준이다. 
  • DBMS는 종류에 따라서 작동방식이 다르다. 
  • java.SQL에는 2가지 모듈이 존재한다. 
    • java.SQL
      • connection 
        • DB와 연결을 담당할 객체가 반드시 구현할 기능을 포함한 인터페이스이다.  Preparedstatement
        • DB에 SQL명령어를 DB에 전송한다. 
        • 결과를 받아올 객체가 반드시 구현할 기능을 포함한 인터페이스이다.  
      • resultSet
        •  SELECT SQL실행결과로 획득한 데이터를  담는 객체가 반드시 구현할 기능을 포함한 인터페이스이다.  
        • 조회결과를 저장해야하는 객체가 구현해야하는 인터페이스이다.
        • 1. 행의 값을 추출하고, 2. 다음행으로 이동, 3. 끝에 도달을 알려주는 기능이 구현되어있다. 
      • resultSetmetaData
        • 조회결과에 대한 메타정보를 표현해야하는 객체가  반드시 구현할 기능을 포함한 인터페이스이다.  
        • 조회된 결과의 컬럼이름, 컬럼갯수, 컬럼타입을 입력한 컬럼들의 집합을 의미한다. 
    • javax.SQL

자바 API

c://app/host_name/product ->21c->dbhomeX->JDBC->jar(압축파일) 모음집 =>JDBC드라이브 

  • java DB Access표준을 정의해놓은 것을 추상화 해놓은 것을 구현한 것 ->RDBMS ->lib폴더에 있음

자바 주요 API

  • Connection 인터페이스 
    • 자바 프로그램과 데이터베이스 간의 연결을 담당하는 객체이다. 
    • Statement createStatement()
      • SQL전송을 담당하는 Statement객체를 반환한다. 
      • SQL injection : SQL구문의 내용을 수정하는 공격기법 에 취약하다.
      • 사용할일이 없다. 
    • PreparedStatement prepareStatement(String sql)
      • SQL전송을 담당하는 Statement객체를 반환한다. 
      • 연결된 상태에서 획득된다. 
      • SQL의 DBMS의 전송과 반환이 connection안에 존재한다. 
      • SQL injection DB 공격기법을 무력화 시킨다. 
    • void commit()
      • SQL실행결과를 DB에 반영시킨다. 
    • void rollback()
      • SQL실행결과를 DB반영을 취소시킨다. 
    • void close()
      • DB와의 접속을 해제한다. 
      • 내전용의 memory의 자원을 해제시킨다. 
  • PreparedStatement 인터페이스
    • PreparedStatement preparedStatement = connection.PreparedStatement(sql);
      • 연결된 상태에서 SQL을 전송해야한다. 
    • SQL의 전송을 담당하는 객체이다.
    • execute()란 
      • SQL을 실행시키는 메소드이다. 실제로 쿼리를 전달, 쿼리를 실행한다. 
    • int executeUpdate()
      • INSERT, UPDATE, DELETE 쿼리를 DB로 전송하고, 실행결과를 반환한다. 
      • int가 반환타입으로 숫자로 반환된다. 
      • 그러나 거의 1행씩 입력이 이뤄지고, 수정, 삭제가 되기 때문에 1행의 값이 변경된다. 
    • ResultSet executeQuery()
      • Select 쿼리를 DB로 전송하고, 조회결과를 반환한다. 
      • resultSet으로 객체를 반환하고, 
        • SQL을 preparedStatement에게 획득된다. 
      • void setXXX(int index, XXX value)
        • ? 바운딩에 입력이 될 데이터이다. 
        • XXX은 입력이 될 데이터 타입을 입력해주면 된다. 
        • Selcet * from employees where salary >= ? and salary <= ?
          • 값이 들어갈 자리가 미리  준비가 되어있다. 
          • preparedStatement의 실제 쿼리이다. 
          • 1: 5000 2: 10000
          • 각 물음표에 나눠서 순서대로 입력이 된다. 
          • preparedStatement. setInt (1, 5000)
            preparedStatement.setInt(2,10000)
            이렇게 입력이 들어간다. 
  • ResultSet 인터페이스 
    • Select 쿼리문의 조회 결과를 담당하는 객체이다. 
    • boolean next()
      • 커서를 다음행으로 이동시킨다. 데이터행이 존재하면 true를 반환한다. 
    • XXX get XXX(String columnName)
      • 컬럼명에 해당하는 값을 반환한다. 
      • String getString(String columnName);
      • int getInt(String columnName);
      • long getLong(String columnName);
      • double getDouble(String columnName);
      • Date getDate(String columnName);
      • 행단위로 출력한다. 
      • 언젠가는 마지막행이 false를 반환할 것이다. 
      • while(rs.next())로 입력하여 iterater처럼 출력한다. (iterator에 대해서 읽어보세요)
      • https://lionpower.tistory.com/164
 

Set interface, List interface(iterator)

java.Lang.package안에는  Object,List,Set,Map,ArrayList,HashSet,HashMap,LinkedList,TreeSet,HashTable,Stack,Vector Date,Arrays,Collection,Objects,Random,Calendar 이 존재한다. 첫번째의 경우는 자료구에..

lionpower.tistory.com

 

DB에서는 마지막으로 close를 역순으로 작성해주어야한다. --> SQLDeveloper의 메모리에 있는 모든 자원을 삭제한다. 

DriverManager클래스

  • JDBC 표준을 구현한 JDBC 드라이버를 관리하는 클래스이다. 
  • Connection getConnection(String url, username, String password)
    • url이 가르키는 데이터베이스에 지정된 계정정보로 연결을 시도한 후 연결을 담당하는 Connection객체를 반환한다. 

 

프레임워크, 라이브러리 포함 방법

  • 외부라이브러리 포함,- > 오른쪽버튼 Libraries->project -> BuildPath->ConfigureBuildPath ->javaBuildpath->classpath ->app/host/lib/ojdbcll.jar -->이제 JRE, Referenced Libraries에 사용
  •  
    • buildpath
      • 어플리케이션 실행시 필요한 설정정보에 대해서 app는 compile이 필요하다. 
      • import 할 위치에 둔다. 
      • BuildPath, ClassPath에 둔다. 
  • API가 없으면 인터넷에서 다운
  • DB access 절차 -? JDBC API를 사용 , java+DB를 연동함
    1. JDBC 드라이브 JVM메모리에 로딩한다. 
      • 정적초기화 블록을 사용하여, 클래스가 메모리에 로딩될 때 즉시 실행되도록 한다. 
      • class ConnectionUtil이라는 class를 만든다. 
      • private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
        private static final String USER_NAME = "hr";
        private static final String PASSWORD = "zxcv1234";
        • "jdbc:oracle:thin:"  이부분이 JDBC의 드라이버의 위치이다.
        • @localhost: 데스탑, 랩톱의 로컬호스트 이름이다. 
        • 1521 : oracle의 port번호이다. -->다른 SQL은 다른 서버번호를 가지고 있다. 
        • xe : SID번호이다. 
      • 클래스가 메모리에 로딩되는 시점은 수행문에서 클래스 이름이 처음등장하는 순간이다. 
      • 정적초기화 블록은 클래스의 일생동안 단 한번만 실행된다. 
      • JDBC드라이버를 JVM의 드라이버 레지스토리에 등록하는 작업도 딱 한번만 등록되면 되기 때문에 정적초기화 블록으로 작성하였다. 
    2. 예외 메세지를 정적메소드로 작성한다. 
      • static {
        try {
        Class.forName("oracle.jdbc.OracleDriver"); //class.forName으로 ("oracle.jdbc.OracleDriver")의 설계도를 메모리에 올리기만 했다. 생성은 하지 않았다. 
      • JVM 드라이버 레지스터가 memory에 로딩 되자마자 실행되는 static을 초기화 실행하고 oracle의 초기화 코드가 실행된다.
      • } catch (ClassNotFoundException ex) { //c
        ex.printStackTrace();
        }  라이브러리가 등록이 안될수도 있고, 경로를 잘 못 적을수도 있어서 나오는 exception이다 
        }
    3. RDBM와 연결된 새로운 Connection객체를 반환하는 메소드를 입력한다. 
      • return type은 RDBMS와 연결을 담당하는 Connction객체이다. 
      • throw SQLException RDBMS와의 연결이 실패하는 경우 예외가 던져지도록 작성하였다. 
      • public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL,USER_NAME,PASSWORD);
        }

사용할 때에는 ConnectionUtil.getConnection(); 메소드로 사용해주면 된다.

반응형
Comments