ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿼리 실행해보기
    JDBC 2022. 1. 30. 23:12

    **유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.

     

    오늘은 실제로 jdbc를 이용해서 데이터를 가져오는 연습을 해 볼 것이다.

    데이터를 가져오려면 우선 오라클 서버의 테이블이 정의 되어 있어야 하고  데이터들이 있어야 한다.

    테이블 몇개를 만들어보자 

    CREATE TABLE NOTICE
    (
    ID NUMBER
    ,TITLE NVARCHAR2(100)
    ,WRITER_ID NVARCHAR2(50)
    ,CONTENT CLOB
    ,REGDATE TIMESTAMP
    ,HIT NUMBER
    ,FILES NVARCHAR2(1000)
    );
    
    CREATE TABLE COMMENT_T (
    ID NUMBER
    ,CONTENT NVARCHAR2(2000)
    ,REGDATE TIMESTAMP
    ,WRITER_ID NVARCHAR2(50)
    ,NOTICE_ID NUMBER);
    
    CREATE TABLE ROLE (
    ID VARCHAR2(50)
    ,DISCRIPTION NVARCHAR2(500));
    
    CREATE TABLE MEMBER_ROLE (
    MEMBER_ID NVARCHAR2(50)
    ,ROLE_ID VARCHAR2(50));
    
    CREATE TABLE MEMBER (
    ID NVARCHAR2(50)
    ,PWD NVARCHAR2(50)
    ,NAME NVARCHAR2(50)
    ,GENDER NCHAR(2)
    ,BIRTHDAY CHAR(10)
    ,PHONE CHAR(13)
    ,REGDATE DATE
    ,EMAIL VARCHAR2(200));

     

    이렇게 테이블을 생성 해 준다.

    **CLOB은 긴 문자열을 저장하는 데이터 타입

     

     

    데이터 베이스에서 테이블이 가지고 있는 속성들은 필드,컬럼 으로 불리운다.

     

    지난번 포스팅에서 작성했던 

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con = DriverManager.getConnection(url, "id", "****");
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(sql);

    이 네개의 객체는 데이터베이스를 연동을 할 때에 붙박이처럼 사용된다고 생각하면 된다.

    우리가 업무에 따라 다양한 테이블을 이용하게 된다. 그때 테이블의 내용이 달라진다고 해도 이 네개 객체의 순서나 내용은 달라지지 않기 때문에 네개를 세트로 활용해주면 된다.

     

    이 네개 객체는 생성 될 때에 시스템의 자원을 쓰게 되는데 그 자원을 돌리는 함수는 close이다.

    해당 객체의 자원을 해지 해 줄 경우에 사용 해 주고 순서는 역순으로 작성 해 주면 된다.

    우리가 어딘가에 들어갈 때 들어가는 순서와 반대 순서로 문을 열고 나오는 것을 생각하면 이해하기 쉬울 것이다.

    rs.close();
    st.close();
    con.close();

     

     

    만약 close를 안하게 되면 프로그램이 끝나고 나면 자원은 알아서 끝나게 되겠지만 일반적으로 자원을 쓰고 바로 close를 해 주는것이 다음 자원도 쓸 수 있기 때문에 성능적 부분에서 꼭 필요하다.

     

    그리고 이 코드에서 추가적으로 알아야 할 것이 이 두가지인데

    Connection con = DreiverManager.getConnection(url,"id". "pwd"); ResultSet rs = st.executeQuery(sql);

     

    우선 데이터 베이스에 접속하기 위해서는 어느 서버에 접속 할 것인지(url), 어떤 사용자가 어느 아이디랑 비밀번호 인증을 하려고 하는지(id, pwd), 어느 데이터베이스에 접속하려고 하는지(sql)가 필요하게 된다.

     

    id와 pwd는 객체에 적어주면 되고 url의 경우는 입력 할 수 있는 정보 구조가 있어야 하는데

     

    String url = "jdbc:oracle:thin:@192.168.0.15:1521/xepdb1";

    이렇게 작성 해 주어야 한다.

    192.168.0.15 부분은 localhost라고 써도 된다. 

    세부정보에 적힌 경로를 순서대로 작성한것이다.

     

    sql의 경우는 이미 생성 해 둔 테이블 notice에 대한 정보를 다 읽어 올 것이기 때문에 

    String sql = "SELECT * FROM NOTICE";

    라고 작성 해 주면 된다.

     

    그럼 URL과 ID,PWD를 통해서 인증이 되고 연결이 확립이 되고 그 상태에서 실행 도구를 준비 한 후(statement st ) 쿼리를 실행하게 되는 것이다. 쿼리를 st.executeQuery 함수를 통해서 실행하게 되면 서버쪽에는 결과 집합이 만들어지게 되고  결과 집합을 사용하기 위해 그릇 역할과 커서를 움직일 수 있는 도구를 resultset을 통해서 준비하게 된다. 

     

    그럼 문제 없이 실행이 된다면 우리는 rs.next의 기능으로 다음을 호출하게 되고 첫 코드가 rs 객체에 담기게 되고 컬럼 단위로 데이터를 꺼낼 수 있게 된다.  

     

    그럼 이클립스를 통해서 연습 해 보자 

    우선 자바 프로젝트를 하나 만들어 주고 그 안에 클래스를 생성 해 준다.

    		String url = "jdbc:oracle:thin:@localhost:1521/xepdb1";
    		String sql = "SELECT * FROM NOTICE";
    		
    		Class.forName("oracle.jdbc.driver.OracleDriver");
    		Connection con = DriverManager.getConnection(url,"sys as sysdba", "비밀번호");
    		Statement st = con. createStatement();
    		ResultSet rs = st.executeQuery(sql);
    		
    		rs.next(); //다음으로 넘어가기
    		String title = rs.getString("TITLE"); //title이라는 컬럼명을 조회
    		System.out.println(title); //제대로 가져와지는지 출력문으로 확인해보기 
    	
    		rs.close();
    		st.close();
    		con.close();

    빨간줄이 뜨는 것들은 예외처리를 위해 다 던져준다.

    이렇게 하고 실행 했더니 오류가 난다. 

     

    이것을 참고해보자 

     

    https://talkpotato.tistory.com/60

Designed by Tistory.