
Eclipse로 Oracle DB 연결
앞선 글에서 Eclipse에서 Oracle DB를 연결해주는 DBConn클래스를 만들었고, 이젠 이 클래스를 이용해서 쿼리문을 날려볼 예정이다.
단순 검색/조회만 하는 SELECT문과, 그 외에 데이터베이스의 데이터값을 추가/수정/삭제하는 INSERT/UPDATE/DELETE문으로 나뉜다고 했는데, 먼저 SELECT문부터 알아보자.
5.a. SELECT문 실행 - executeQuery()
package javaJDBC;
import java.sql.SQLException;
public class SelectTest extends DBConn{
public SelectTest() {}
public void empList() {
try {
// 사원목록 선택
// 1. 드라이버 로딩 - 상속받은 DBConn 클래스의 static영역에서 이미 실행됨
// 2. DB연결
dbConn();
// 3. 쿼리문(PreparedStatement) 생성
sql = "select empno, ename, job, hiredate, sal, comm from emp order by empno"; // 쿼리문 끝에 ; 붙이면 에러
pstmt = conn.prepareStatement(sql);
// 4. 실행
rs = pstmt.executeQuery(); // 선택한 레코드 정보를 ResultSet 객체로 리턴
// 5. DB에서 SELECT한 레코드 출력
while(rs.next()) { // rs.next()는 선택한 레코드의 커서 위치를 이동시킨다
// 정수 : getInt(), 실수 : getDouble(), 문자열 : getString()
int empno = rs.getInt(1); // 1번 칼럼에 있는 정수 리턴
String ename = rs.getString(2); // 2번 칼럼에 있는 문자열 리턴
String job = rs.getString(3);
String hiredate = rs.getString(4); // 날짜는 문자열 형태
double sal = rs.getDouble(5);
double comm = rs.getDouble("comm"); // 칼럼번호 대신 칼럼명으로도 호출 가능
System.out.printf("%d, %s, %s, %s, %.2f, %.2f\n", empno, ename, job, hiredate, sal, comm);
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
// 6. DB닫기
dbClose();
}
}
public static void main(String[] args) {
new SelectTest().empList();
}
}
SELECT문을 실행시킬 SelectTest클래스를 생성하자. main메소드도 포함시킨다.
여기서 눈여겨 봐야할 것은 이전에 만든 DBConn클래스를 상속받아야한다는 점이다.
상속을 받게되면, DBConn에 있는 멤버변수, 멤버메소드를 모두 가져다 쓸 수 있다.
나열해보자면 conn, pstmt, rs, sql, url, username, password, dbConn(), dbClose()가 있다.
SelectTest클래스를 호출하는 생성자를 만들고, 실제 쿼리문을 담고있는 메소드 empList()를 만들어서 그 안에서 실행시켜보자.
dbConn()을 가장 먼저 사용해서 연결을 실행시키고, sql문을 문자열로 적어준다.
작성된 sql문을 conn의 prepareStatement()로 pstmt에 넣어준다.
그리고 pstmt를 executeQuery()로 실행해주면 되는데, 이 부분에서 나머지 INSERT/UPDATE/DELETE랑 차이가 있다.
rs에 쿼리문 실행결과가 담겨있는데, 이 결과를 Java 콘솔에 출력해주는게 다음 단계다.
ResultSet에는 하나의 열을 가리키는 커서가 있는데, 모든 행에 있는 정보를 출력하기 위해서 반복문으로 출력을 해주었다.
출력해주는 정보를 ResultSet rs에서 가져오기 때문에 getInt(), getString(), getDouble()을 이용했다.
6.a. DB 닫기
그리고 끝으로 dbClose()로 DB를 닫아준다.
Eclipse에서 Oracle DB를 연결해서 쿼리문을 실행했다. 데이터를 검색/조회하는 SELECT문의 경우엔 executeQuery()를 사용했다. 하지만 데이터를 추가/수정/삭제할때는 executeUpdate()를 이용해야한다.
5.b. INSERT/UPDATE/DELETE문 실행 - executeUpdate()
package javaJDBC;
import java.util.Scanner;
public class UpdateTest extends DBConn{
Scanner sc = new Scanner(System.in);
public UpdateTest() {}
public void empEdit() {
// 사원번호를 기준으로 담당업무와 급여를 수정
try {
// 기존 사원목록 출력
SelectTest st = new SelectTest();
st.empList();
System.out.println("==================================================");
// 수정할 정보를 Scanner로 입력
System.out.print("사원번호->");
int empno = Integer.parseInt(sc.nextLine());
System.out.print("수정할 담당 업무->");
String job = sc.nextLine();
System.out.print("수정할 급여->");
double sal = Double.parseDouble(sc.nextLine());
// 1. DB 연결
dbConn();
// 2. 쿼리문 생성 -> PreparedStatement객체 생성
sql = "update emp set job=?, sal=? where empno=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, job);
pstmt.setDouble(2, sal);
pstmt.setInt(3, empno);
// 3. 실행
int result = pstmt.executeUpdate(); // Update된 레코드 수를 리턴
if(result>0) {
System.out.printf("사원번호 %d의 담당업무는 %s, 급여는 %.2f로 수정되었습니다.\n", empno, job, sal);
}else {
System.out.println("수정 실패.");
}
}catch(Exception e) {
e.printStackTrace();
}finally {
// 4. DB 닫기
dbClose();
}
}
public static void main(String[] args) {
new UpdateTest().empEdit();
}
}
여기서는 ResultSet을 이용하지 않는다. 대신 executeUpdate()는 추가/수정/삭제된 레코드 수를 리턴한다.
이 리턴값을 result로 정의하고, result가 0이면 실행을 안 했거나 못 했다는 뜻이고, 0보다 크면 실행이 되었다는 뜻이다.
6.b. DB 닫기
마지막은 마찬가지로 DB를 닫아준다.
'Database' 카테고리의 다른 글
| 11.24.(금) OracleDB(20): Eclipse+PL/SQL (0) | 2022.11.29 |
|---|---|
| 11.17.(목) OracleDB(18): Eclipse로 Oracle DB 연결(1) (0) | 2022.11.29 |
| 11.24.(금) OracleDB(17): PL/SQL (0) | 2022.11.29 |
| 11.23.(수) OracleDB(16): Docker 컨테이너 파일 접속 (0) | 2022.11.27 |
| 11.23.(수) OracleDB(15): 사용자 생성 및 관리 (0) | 2022.11.27 |