반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- char[] String 형변환
- isinterrupted()
- Daemon()
- interrupted()
- Linux셋팅
- 스레드그룸
- ID중복
- interrupt()
- 메모리스트림
- 동기화
- 표현 언어
- 상관서브쿼리
- ThreadGroup()
- StringWriter
- Linux세팅
- String char[] 형변환
- first-child
- sleep()메소드
- 상관 서브 쿼리
- first-of-child
- 아이디중복
- StringReader
- include 지시자
- 리눅스세팅
- 리눅스셋팅
- InputDialog
- include지시자
- ObjectInputStream
- include액션태그
- MemoryStream
Archives
- Today
- Total
다연이네
[days06] 부서번호를 입력받아 해당 사원 정보 출력하기 본문
반응형
1. 오라클 저장 프로시저 만들기
create or replace procedure up_selectemp --여러명의 사원이 나올 수 있음 => 커서 사용
(
pdeptno in dept.deptno%type
,pCursor out SYS_REFCURSOR -- out : 결과물을 커서에 담아서 출력용 용도로 쓰갰다
)
is
vsql varchar2(1000); --vsql 동적쿼리
begin
vsql := 'SELECT deptno, empno, ename, job, hiredate ';
vsql := vsql||' from emp ';
vsql := vsql||' where deptno = :pdeptno';
--동적쿼리 실행, 얘가 실행되면 결과물이 커서에 담긴다
open pCursor for vsql --동적쿼리를 쓸때는 open for문 쓰는 것 기억
using pdeptno;
--그럼 이 커서를 가지고 자바 단에서 출력
--예전에는 loop~fetch문을 써서 여기서 출력했는데 이젠 이럴 일 없다
--exception
end;
2. 자바 클래스 만들기
package days06;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import com.util.DBConn;
import days02.EmpDTO;
public class Ex01 {
public static void main(String[] args) {
//UP_SELECTEMP;
System.out.print("> deptno input ? ");
Scanner scanner = new Scanner(System.in);
int deptno = scanner.nextInt();
//원래 int인데 String으로 날려도 전혀 상관 없음
//오라클은 홑따옴표를 사용하기 때문
Connection con = null;
CallableStatement cstmt= null;
ResultSet rs= null;
ArrayList<EmpDTO> list = null;
String sql ="{ call UP_SELECTEMP( ? ,? ) }";
con = DBConn.getConnection();
try {
cstmt = con.prepareCall(sql);
// ?
cstmt.setInt(1, deptno);
// ? OUT 출력용 매개변수 설정
cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
// rs= cstmt.executeQuery(); 이게 아니라 두번째 파라미터 값인 커서로 돌려준다
cstmt.executeQuery();
rs = (ResultSet) cstmt.getObject(2); //다운캐스팅 작업
if(rs.next()) {
list= new ArrayList<EmpDTO>();
EmpDTO dto = null;
do {
dto = new EmpDTO( );
dto.setEMPNO(rs.getInt("empno"));
dto.setDEPTNO(deptno);
dto.setENAME(rs.getString("ename"));
dto.setJOB(rs.getString("job"));
dto.setHIREDATE(rs.getDate("hiredate"));
list.add(dto);
}while(rs.next());
}//if
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
cstmt.close();
DBConn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}//finally
printEmpInfo(list);
}//main
private static void printEmpInfo(ArrayList<EmpDTO> list) {
if(list == null) {
System.out.println("사원이 존재하지 않습니다");
}else {
Iterator<EmpDTO> ir = list.iterator();
while (ir.hasNext()) {
EmpDTO dto = ir.next();
System.out.println(dto);
}
}
}//printEmpInfo
}//class
반응형
'JDBC' 카테고리의 다른 글
[days06] 자바에서 트랜잭션 처리 (0) | 2020.11.30 |
---|---|
[days06] 회원 가입 - ID 중복 체크 버튼 테스트 (0) | 2020.11.30 |
[days05] 저장 프로시저 (stored procedure)를 사용하는 CallableStatement 예제 (0) | 2020.11.29 |
[days05] ResultSet 결과물에 대한 정보 추출, 사용 예제, ResultSetMetaData (0) | 2020.11.29 |
[days04] 게시판 만들기 (0) | 2020.11.26 |
Comments