DB와 JAVA 연동하기
1. Package에 DB 연동에 필요한 Libraries를 불러오기
DB를 연동하기 위해서는 해당 project의 Libraries에 우리의 Libraries를 추가해 주어야한다.
1. Package Explorer에서 project를 오른쪽 클릭하고 Build Path로 진입
2. Libraries 탭으로 진입하여 Add External JARs 클릭
3. 오라클 홈디렉토리로 이동하여 ojdbc6 선택
경로는 설치할때 기록해놓은 것을 확인!
적용 후 apply and close!
결과
referenced libraries 가 생성되었다.
생성 된 것의 내부를 살펴보면 이제 라이브러리목록이 잘 불러와진 것을 확인할 수 있다.
이렇게 연결된 라이브러리는 해당 프로젝트만 불러와진 상태이니 다른프로젝트에서도 DB연동을 하고싶으면 매번 새로 해주어야하는 일이다.
2. Eclispse에서 DB와 연결하기
<1> jdbc driver등록
찾지못했을때를 위하여 실패했을경우에 try-catch를 만들어 준다.
<2> 연결
<3>객체 준비
Statement라는 타입으로 객체를 미리 선언해준다.
try문 안에서 선언할 경우 지역변수가 되어 다른곳에서 쓸수 없기때문에 바깥에서 선언해주는 습관을 들이자.
그리고 선언은 원래 코드 초기에 몰아서 진행해야하나 이번에는 보는데에 있어서 편의성을 위해 여기서 선언하였다.
<4>쿼리문 실행
위에서 선언한 stmt에 executeUpdate를 이용하여 query문을 실행했다.
<5>자원 반납
Scanner 에서 그랬던것 처럼 우리가 입력받아 사용했던 것을 close해주지 않으면 다른곳에서의 접근이 불가능 한 상태가 되므로 close하여 자원을 반납해야한다.
그러면 쿼리문이 잘 실행되었는지 확인해보자.
잘 들어간것이 보인다.
※혹여 콘솔에서 getConnection까지만 진행되고 그 뒤로는 반응이 없다면
프롬프트에서 commit을 하여 프롬프트에서 진행중이던 사항을 적용시켜 권한을 이클립스에게 넘겨주자.
cmd창과 이클립스가 하나의 테이블을 동시에 작업할 수 없다!
execute 와 executeUpdate, executeQuery
쿼리문의 종류에 따라 호출해야할 메서드가 달라지기도 한다.
이전에 다룬 query문은
int 값을 return 하는 메서드인executeUpdate 메서드를 이용했다. 우리는 query를 이용해 테이블의 값을 수정하면 commit을 통해 값을 저장했는데, 이 메서드는 그 과정을 한번에 진행시켜준다. auto-commit 이다.
그러나 우리가 select로 조회만 한다면 commit을 할 변경점이 있을리가 없다.
그럴때 이용하는것이 execute 메서드이다.
이때의 조회를 진행하며, 조회한 것이 있다면 true, 조회할내용이 없다면 false로 boolean 타입을 return 하는 메서드이다.
그리고 executeQuery를 알아보자.
executeQuery는 앞의 것들과 다르게 ResultSet 이라는 타입의 데이터를 return 한다. ResultSet은 import 해주어야하며, 테이블의 모든 데이터를 가지고 있다.
이때 ResultSet에서 원하는 정보를 가져오고싶다면
변수명.get타입(column의 번호)
변수명.get타입(column의 이름)
이 규칙을 통해 table의 data를 가져올 수 있다.
예를 들어서 실제로 가져오자면
int exInt = rst.getInt(1);
String exString = rst.getString("dname");
이러한 방식으로 해당하는 값을 가져왔다.
DB에서 AS를 이용하여 별칭 부여 (Alias)
이런 테이블이 주어져있다.
salary를 뜻하는 sal column이 보이는데.. 돈이 너무 적지 않나싶다. 그래서
column을 select로 불러줄때 연산자를 붙여서 불렀더니 데이터들 또한 그 연산자를 따라서 변형되었다.
하지만 우리가 이렇게 값을 변경하면 column이름이 복잡해지기때문에 보기에 좋지도않고 불편하다.
이때 우리는 as를 이용해서 column에 별칭을 붙이겠다.
문법은
select column명 [as] "별칭"
의 모양을 지키면 된다.
이렇게 붙인 별칭은 해당 쿼리구문 뒤로 원래 column명의 자리를 대신하며, 원래 column명은 호출하면 error가 발생하니 주의하자.
query문과 변수의 만나는 상황 단순화 하는 ? 활용
이런식으로 변수를 정하여 그 변수를 sql문에 대입을 할 경우 String의 성질을 유지하기 위하여 변수가 나타날때마다 따옴표를 사용해야하는데, 이에 작은따옴표까지도 들어가며 아주 헷갈리고 실수하기 너무나도 좋은 상황이 만들어졌다.
그래서 우리는 이러한 상황을 극복하기 위하여 다른 방식으로 sql문을 작성하겠다.
원래 값이 들어가야했던 자리에 ? 를 작성했다. 그러면 이것은 실행이 되는게 아직 아니다. ? 값을 채워주자.
일단 저러한 ?을 채우는 sql문을 사용하려면 우리가 불러온 테이블을 prepareStatement 타입으로 만들어주어야한다.
그다음엔
이러한식으로 set타입 메서드를 이용해서 ?자리를 채운것으로 만들어 줄 수 있고
이러한 상태가 된 sql문은 이제 executeUpdate중에서도 parameter가 없는것으로 실행할 수 있게되었다. preparedStateme nt 이기 때문에 준비된 sql문이 바로 실행된다.
이렇게 작성함으로써 복잡한식의 작성을 피할수 있다.
'OracleDB > OracleDB 국비지원 수업 정리' 카테고리의 다른 글
OracleDB 5~6일차 수업내용 (※ DTO / DAO / Service / Main 분업화) (0) | 2023.06.08 |
---|---|
학원 유제문제 풀이 (1) | 2023.06.05 |
OracleDB 4일차 수업내용 (0) | 2023.06.05 |
OracleDB 2일차 수업내용 (2) | 2023.06.01 |
OracleDB 1일차 수업내용 (0) | 2023.05.31 |