본문 바로가기
Study/중앙정보처리학원과정

23일차. 이클립스(eclipse)와 오라클 데이터베이스(Oracle database)11gR2 연동

by 얏옹이 2022. 11. 25.
반응형

수업 개발환경과 동일하게 맞추는 설정입니다.

Java 8 버전에 Oracle database 버전은 11gR2 버전입니다.

 

2022.11.16 - [Study/중앙정보처리학원과정] - 17일차. Oracle Database(오라클 데이터베이스)11gR2 설치 그리고 테스트

 

17일차. Oracle Database(오라클 데이터베이스)11gR2 설치 그리고 테스트

현재 수업에서 활용하는 버전은 Oracle Database Express Edition (XE) Release 11.2.0.2.0 (11gR2) 버전이다. 해당 버전은 현재 최신 버전에 비하면 한참 구버전이기때문에, 구버전을 찾아서 설치하는 방법부터

yat-ong.tistory.com

 

 

2022.10.25 - [Study/중앙정보처리학원과정] - 1일차. JAVA 개발환경 만들기

 

1일차. JAVA 개발환경 만들기

10월 25일 첫 강의를 마치고 집에 돌아왔습니다. 최훈학 강사님의 강의를 시작으로 6개월이라는 긴 여정을 떠납니다. 해당 포스팅의 내용은 어디까지나 비전공자 학생으로써 제가 보고 느끼고 이

yat-ong.tistory.com

 

Java 버전과 Oracle database의 버전은 위의 이전 포스팅에서확인할수 있다.

 

오늘 드디어 이클립스와 오라클데이터베이스의 연동 설정을 진행하였다.

 

먼저 이클립스와 연동해줄 Oracle의 라이브러리가 있는 폴더의 경로를 찾아야한다.

 

Oracle database를 별도의 설치 경로 변경 없이 Default값으로 설치했다면

 

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib폴더에 Ojdbc6 이라는 jar 파일이 있을것이다.

 

여기에서 ojdbc 뒤의 숫자는 Oracle database 버전에 따라 다르니 이건 크게 신경쓰지 않아도 된다

 

 

이 파일의 경로를 잘 알아두자. 

 

이제 이클립스(Eclipse)를 실행해주자.

 

 

기존에 Java Project에서 마우스 우클릭 -> Bulid Path -> Configure Build Path에 들어가자

 

 

 

 

이러한 창이 뜨는데 Libraries에 들어가서 Add External JARs를 클릭.

 

 

 

아까 경로로 찾아서 들어가서, ojdbc6 파일을 클릭하고 확인

 

 

라이브러리에 ojdbc6이 추가되었고 추가된게 확인되면 Apply and Close를 눌러서 설정 저장하고 창을 종료한다.

 

그럼 좀전 프로젝트에 Referenced Libraries라고 뜨면서 ojdbc6.jar 파일이 보일것이다.

 

 

이러면 연동은 완료된것이다. 클래스를 하나 만들어서 DB와의 연동이 잘 되는지 테스트해볼 Class를 하나 생성했다.

 

Main method를 포함해서 Class를 생성해주고 OracleDriver를 클래스에 Class.forName을 이용해 선언해준다.

 

위의 URL, ID, PASSWORD 변수는 곧 있을 오라클 연동 connection에서 필요한 문자열들을 저장하기 위한 변수들이다.

 

일단 Class.forName("oracle.jdbc.OracleDriver"); 라고 입력해준다.

 

이건 oracle.jdbc 패키지 안에 있는 OracleDriver라는 경로이다. 대소문자에 유의하자

 

저렇게 선언해주면 예외처리(Try-Catch)처리 해달라고 빨간줄이 쳐진다. 마우스를 올려놓고 일단 Try-Catch 처리해주자.

 

 

Try catch는 예외처리다. 만약에 OracleDriver가 정상적으로 작동을 하면 Try문구를 실행할것이고

오류가 있다면 Catch문의 e.printStackTrace가 수행된다. 

 

상단에 변수에 URL, ID, PASSWORD를 각각 대입해주었다.

 

여기서 URL 작성할때 유의해야할점은 localhost/뒤에오는 DB명인데

 

이건 Oracle Develope에서 확인이 가능하다.

 

 

localhost대신 ip 주소로도 접속이 가능한데. 지금은 내 컴퓨터에 DB가 깔려있는거니 localhost로 해주고

 

ip주소는 간혹 변동되는 경우도 있어서 가급적이면 자신의 컴퓨터에 DB가 깔려있으면 localhost로 선언해주는것이 좋다.

 

 

상단에 선언해준 Connection 클래스 타입의 conn에 DriveManager를 통하여 url과 id값. password 값을 대입해주었다.

 

DB와 연결해줄때 Scott계정으로 연결해주는것이다.

 

다음은 쿼리문 실행을 위한 객체 생성과, 쿼리문 실행을 해야한다.

 

쿼리문 실행을 위한 객체 생성은 크게 2가지가 있다. PreparedStatement 객체와 Statement 객체 이렇게 두가지가있는데

 

수업시간에는 두가지 다 해봤지만. Statement 객체는 아무래도 여러모로 불편함이 많아 잘 사용되지 않을것 같다.

 

그래서 PrepareStatement 객체만 설명하려고 한다.

 

먼저 PrepareStatement 객체를 선언해준다. 변수는 변수끼리 모아놓는게 보기 좋기때문에 다시 상단으로 가서 객체 생성을 위한 변수를 만들어준다.

 

그리고 쿼리문을 날리기 위한 String 타입의 query 변수도 같이 생성해준다.

 

그리고 insert 문을 작성할 쿼리도 준비해준다. oracle database에 scott 계정을 이용할거니

 

emp테이블의 사원을 추가해주겠다. 9000번 사원의 "페이커"의 이름을 가진 직업은 "게이머" 이고, 급여는 3000, 커미션은 5000을 선언해주겠다.

 

현재의 EMP 테이블이다, 9000번 사원은 없는게 확인됐다.

 

Insert 문을 작성해보겠다

 

insert into emp(empno, ename, job, sal, comm)
values(9000,'faker','gamer',3000,5000); 으로 작성할건데 이걸 String 타입의 변수 query에 넣어줄것이다.

 

그림과 같이 선언해주었는데. 첫줄 쿼리문의 공백은 매우 중요하다. Insert문과 Value절 사이에 공백이 한칸 들어가야 쿼리문에서 Insert와 Value절이 구분이 되기때문에, 꼭 잊지말고 공백을 넣어주자.

 

그리고 쿼리문을 날리면 항상 마지막에 ; 로 마무리를 해줘야하는데. Java에서 선언할때는 ;를 입력해주지 않는다.

 

그리고 values에는 ? ? ? ? ? 로 입력해주었다. 이 ?에 값을 다 처리를 해줘야한다. 

 

불편해 보일수 있지만 변수 하나하나 입력해서 다 String 타입 변수에 저장해주는 Statement 객체 타입보다는 한결 낫다 라는게 내 판단이다.

 

PrepareStatement 객체는 선언하면서 바로 Queryt문이 컴파일된다. 이때 컴파일되면서 ? 외에 나머지 쿼리문들은 컴파일이 자동으로 진행되고

 

개발자가 선언과 쿼리문 수행하기 전 그 사이에 ?에 값들을 다 선언해주어야 한다.

 

자 이렇게 객체 생성을 하면 ? 외에 나머지 쿼리문은 자동으로 컴파일 되었다.

 

이제 쿼리문 실행을 해주자.

 

실행을 하기 위해선 ?의 값들을 다 직접 선언을 해줘야한다.

 

여기에서 EMP 테이블의 컬럼들의 데이터 타입과 일치하게 선언을 해주어야 한다.

 

Empno와 SAL, COMM은 Number타입의 컬럼이고 ENAME과 JOB은 VARCHAR2 타입이다.

 

숫자와 문자열 타입이니 Java에서는 Int와 Spring으로 입력해주면 된다.

 

pstm.setInt와 pstm.setString 메소드를 사용한다. 메소드 선언 하게 되면 인덱스 값과 대입할 값을 입력해줘야하는데

 

여기서 인덱스는 몇번째 ?물음표 인지를 선언해주는것이다.

 

 

여기서부터는 쿼리문이 길어진다. 외우기보다는 반복으로 예제를 통해 자동으로 나올때까지 복습 또 복습하자.

 

이렇게 선언해주고 

 

마지막으로 사용한 resource들을 닫아줘야한다. 하지만 순서를 정해서 닫아줘야한다.

 

가장 마지막에 사용한 resource를 가장 먼저 닫아주고, 가장 첫번째 사용한 resource를 가장 마지막에 닫아준다.

 

여기에서 사용한 객체 resource는 conn과 pstm이다.

 

pstm을 먼저 닫아주고 마지막으로 conn을 닫아주겠다. if문을 이용하여 해당 객체 resource가 null이 아니면 리소스를 닫아주는걸로 처리했다.

 

 

자.. 이제 DB 연동 테스트를 위한 코드를 다 작성했다. 바로 실행해보겠다.

 

 

어....우 쓋.....

 

커넥션 단계에서 오류가 난거같다. 코드를 살펴보니 Port 번호를 URL에 대입해주지 않았다.

 

 

Localhost 뒤에 :1521 포트번호를 빼먹었었다.

 

수정하고 다시 런 해보겠다.

 

아씨..........thin 뒤에 : 콜론이 빠졌다... 다시 추가하고 다시 실행....

 

 

오류없이 성공했다. DB 연동하고 Insert가 성공적으로 수행된것이다.

 

정상적으로 잘 값이 DB에 들어갔는지 확인해보겠다.

 

 

쫘잔~ 9000번에 faker가 정상적으로 대입되었다.

 

오늘 설정과 insert문을 수행해보면서 중요한건

 

1. 오타에 유의하자.

2. PreparedStatement 객체는 ? 물음표를 채워줘야한다

3. 쿼리문 작성시 쿼리문 사이에 "공백"에 유의하자

 

4. Class.forName으로 OracleDriver 클래스 선언후에 -> Connection 타입의 변수에 DriverManager.getConnection

    -> Connection 타입의 변수 . Preparestatement 선언 순서를 잘 기억하자

 

5. executeUpdate와 executeQuery의 차이점 숙지하자

 

 

반응형