ResultSet
- select의 조회결과를 자바에서 얻기 위해 cursor의 제어권을 저장한 객체
- 자바에서는 ResultSet을 써서 cursor가 위치한 행(record)의 컬럼값을 얻음
- !! 하는 일!!
1) cursor를 이동시키는 일
* cursor : 조회 결과를 얻기 위해 움직이는 pointer
> DB에서 테이블이 조회되면 inline view가 생성되는데, inline view 앞에 cursor가 존재함
> cursor 이용하는 경우에는 previous() 쓰지 말자. 부하가 엄청 크다. 쿼리로 해결하자
- 커서가 있는 위치에서 다음 레코드가 존재하는지? : rs.next()
> 커서가 있는 위치에서 다음 레코드가 존재하면 true가 반환되고 커서의 위치가 아래로 이동함
> 무조건 처음에 next()를 먼저 수행해야 커서가 컬럼의 값이 존재하는 레코드의 첫 행으로 내려갈 수 있음!
2) Oracle의 데이터형을 Java에 저장하기 위해 형변환을 수행
- 오라클의 데이터형을 자바로 저장하기 위해 자바의 데이터형으로 변환하여 얻는 일
| 형식 | Oracle | Java | ResultSet method |
| 숫자 | Number |
정수 : byte, short, int, long | getByte(), getShort(), getInt(), getLong() |
| 실수 : float, double | getFloat(), getDouble() | ||
| 문자열 | char / varchar2 | String | getString() |
| 날짜 | date | Date | getDate() // 반환형은 java.sql.Date (java.util.Date의 자식class) |
- get method의 () 안에는 컬럼명 or 인덱스를 넣어서 값을 가져온다
> 인덱스는 1번부터 시작! cursor가 0번
> 인덱스를 사용하면 가독성이 떨어지므로 되도록 컬럼명을 사용하여 코딩하자
- Java API에서 ResultSet의 method 참고하여 골라 사용하자
# 오늘의 코딩 #
- Statement를 사용해보자!
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.sun.net.httpserver.Authenticator.Result;
/**
* Statement 사용한 DBMS 연동
* @author user
*/
public class UseStatement {
/**
* CP_DEPT 테이블의 모든 레코드 조회
* @throws SQLException
*/
public void selectAllCpDept() throws SQLException {
//1. 드라이버 로딩
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}//end catch
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id = "scott";
String pass = "tiger";
Connection con = null; // DB연동 유지, transaction, 쿼리문 생성객체 얻기
Statement stmt = null; // 쿼리문 실행
ResultSet rs = null ; // 조회(Cursor의 제어권), 데이터형 변환
try {
//2. Connection 얻기
con = DriverManager.getConnection(url, id, pass);
//3. 쿼리문 생성객체 얻기
stmt=con.createStatement();
//4. 쿼리문 수행 후 결과 얻기
String selectCpDept = "select deptno,dname,loc from cp_dept";
rs = stmt.executeQuery(selectCpDept);
// DB조회 결과로 인라인뷰가 만들어지고 커서 제어권 가져옴
int deptno = 0;
String dname = "";
String loc = "";
// 조회결과에서 커서의 첫 위치는 컬럼명이 있는 곳이므로 무조건 한번은 내려야 값이있는 행에 위치할 수 있음
while(rs.next()) { // 포인터가 존재하는 위치 아래에 레코드가 존재하는지?
//컬럼명으로 얻기 => 가독성이 높음
deptno = rs.getInt("deptno");
dname = rs.getString("dname");
loc = rs.getString("loc");
System.out.println(deptno + " / " + dname + " / " + loc);
}//end while
} finally {
//5. 연결 끊기
if(rs != null) {rs.close();}
if(stmt != null) {stmt.close();}
if(con != null) {con.close();}
}//end finally
}//selectAllCpDept
public static void main(String[] args) {
UseStatement us = new UseStatement();
try {
us.selectAllCpDept();
} catch (SQLException e) {
e.printStackTrace();
}//end catch
}// main
}// class
# 출력 결과 #

무사히 출력완료!
'Development > JDBC' 카테고리의 다른 글
| [JDBC] DAO / PreparedStatement 활용 (0) | 2021.10.15 |
|---|---|
| [Java/JDBC] Singleton Pattern (0) | 2021.10.14 |
| [JDBC] SQL Exception / SQL Injection (0) | 2021.10.13 |
| [JDBC] JDBC 작업 순서 / 쿼리문 생성객체 / bind 변수 (0) | 2021.10.11 |
| [JDBC] JDBC / driver 종류 / java.sql package (0) | 2021.10.05 |

