반응형
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 | 31 |
Tags
- InputDialog
- ThreadGroup()
- 메모리스트림
- sleep()메소드
- 아이디중복
- first-of-child
- String char[] 형변환
- include지시자
- StringReader
- interrupted()
- 스레드그룸
- char[] String 형변환
- 표현 언어
- Daemon()
- 리눅스세팅
- ObjectInputStream
- first-child
- Linux세팅
- MemoryStream
- StringWriter
- 리눅스셋팅
- include액션태그
- isinterrupted()
- ID중복
- 동기화
- 상관 서브 쿼리
- Linux셋팅
- include 지시자
- interrupt()
- 상관서브쿼리
Archives
- Today
- Total
다연이네
[days02] 싱글톤 클래스 SELECT(조회) 작업하기 본문
반응형
1.DEPT SELECT 하기
1) DeptDTO 클래스 생성 - dept테이블의 deptno, dname, loc 객체를 담고 있음
package days02;
/**
* @author 82103
*
*/
public class DeptDTO {
//필드
private int DEPTNO;
private String DNAME;
private String LOC;
//getter, setter
public int getDEPTNO() {
return DEPTNO;
}
public void setDEPTNO(int dEPTNO) {
DEPTNO = dEPTNO;
}
public String getDNAME() {
return DNAME;
}
public void setDNAME(String dNAME) {
DNAME = dNAME;
}
public String getLOC() {
return LOC;
}
public void setLOC(String lOC) {
LOC = lOC;
}
//생성자
public DeptDTO() { //디폴트 생성자
super();
}
//이부분 추가한 거
public DeptDTO(int dEPTNO, String dNAME, String lOC) {
super();
DEPTNO = dEPTNO;
DNAME = dNAME;
LOC = lOC;
}
//오버라이딩
@Override
public String toString() {
return String.format("%d\t%s\t%s\n",DEPTNO,DNAME,LOC);
}
}
2) 위의 클래스를 이용해 SELECT 작업이 이루어지는 클래스 작성
package days02;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import com.util.DBConn;
public class Ex02 {
public static void main(String[] args) {
//나중에 자바아닌것으로 할때는 프로시저명으로 처리하는게 속도가 빠르다
String sql = "SELECT deptno, dname, loc FROM DEPT";
Connection con = DBConn.getConnection(); //connection객체 얻어옴
ArrayList<DeptDTO> list = null; //캐치블록 밖에 빼주기
//CRUD
//1. 쿼리를 수행할 객체가 필요 -3가지 : Statement 3가지 종류
//2. select 한 결과물을 가지고 있는 저장하고 있는 객체 : ResultSet
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
//select 쿼리를 실행할 때는executeQuery()메서드 사용 : 일꾼이 무슨일을 할지?
/*
while(rs.next()) {//다음 레코드가 있으면 true, 없으면 false 값을 돌림
int deptno = rs.getInt(1); //위의 "SELECT deptno, dname, loc FROM DEPT"; 에서 1번째거 (0이아닌 1부터 시작)
String dname = rs.getString(2);
String loc = rs.getString(3);
System.out.printf("%d\t%s\t%s\n", deptno, dname, loc);
}
*/
list = new ArrayList<DeptDTO>();
while(rs.next()) {
DeptDTO dto = new DeptDTO();
dto.setDEPTNO(rs.getInt(1));
dto.setDNAME(rs.getString(2));
dto.setLOC(rs.getString(3));
list.add(dto); //굳이 왜 어레이리스트에 담나 ? 나중에 출력용에 담아서 넘겨줌
}
rs.close(); //닫는거 잊지말자!
stmt.close(); //닫는거 잊지말자!
} catch (SQLException e) {
e.printStackTrace();
}
DBConn.close();
// list 안에 부서정보 들어가 있을 것 => 출력해보자
Iterator<DeptDTO> ir = list.iterator();
while (ir.hasNext()) { //while 컨+스
DeptDTO dto = ir.next();
System.out.println(dto);
}
System.out.println("=end=");
}
}
-> dept 테이블의 모든 레코드의 deptno, dname, loc 컬럼을 출력한다.
2. EMP SELECT 하기
1) EmpDTO 클래스 생성 - emp 테이블의 모든 객체를 담고 있음
package days02;
import java.sql.Date;
/**
* @author 82103
*
*/
public class EmpDTO {
//실제 DB 칼럼명에 맞춰 만들기
//필드
private int EMPNO;
private String ENAME;
private String JOB;
private int MGR;
private Date HIREDATE; //date는 java.sql로 잡음
private int SAL;
private double COMM;
private int DEPTNO;
//게터세터
public int getEMPNO() {
return EMPNO;
}
public void setEMPNO(int eMPNO) {
EMPNO = eMPNO;
}
public String getENAME() {
return ENAME;
}
public void setENAME(String eNAME) {
ENAME = eNAME;
}
public String getJOB() {
return JOB;
}
public void setJOB(String jOB) {
JOB = jOB;
}
public int getMGR() {
return MGR;
}
public void setMGR(int mGR) {
MGR = mGR;
}
public Date getHIREDATE() {
return HIREDATE;
}
public void setHIREDATE(Date hIREDATE) {
HIREDATE = hIREDATE;
}
public int getSAL() {
return SAL;
}
public void setSAL(int sAL) {
SAL = sAL;
}
public double getCOMM() {
return COMM;
}
public void setCOMM(double cOMM) {
COMM = cOMM;
}
public int getDEPTNO() {
return DEPTNO;
}
public void setDEPTNO(int dEPTNO) {
DEPTNO = dEPTNO;
}
//생성자
//1. 디폴트 생성자
public EmpDTO() {
super();
}
//2. 필드를 모두 가지는 생성자
public EmpDTO(int eMPNO, String eNAME, String jOB, int mGR, Date hIREDATE, int sAL, double cOMM, int dEPTNO) {
super();
EMPNO = eMPNO;
ENAME = eNAME;
JOB = jOB;
MGR = mGR;
HIREDATE = hIREDATE;
SAL = sAL;
COMM = cOMM;
DEPTNO = dEPTNO;
}
//오버라이딩
@Override
public String toString() {
return String.format("%d\t%s\t%s\t%d\t%s\t%.2f\t,%.2f\t%d\n"
, EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO);
}
}
2) 텍스트파일에 환경정보 작성해서 저장
3) SELECT할 클래스 생성
package days02;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;
import com.util.DBConn;
public class Ex02_02{
public static void main(String[] args) {
//문제) emp 테이블 모든 컬럼 select
//EmpDTO 클래스 선언 -> ArrayList<EmpDTO> list 저장
//ipAddress, SID, user, password 정보들이 ConnectionString.properties 파일에 있다고 가정
//해당 파일 추가 comm.util -> 뉴 -> 언타이틀드 텍스트 파일
//파일만들어서 정보 넣음
String fileName = ".\\src\\com\\util\\ConnectionString.properties";
Properties prop = new Properties();
String hostname = null, sid=null, user=null, password=null;
try {
prop.load(new FileReader(fileName));
hostname = prop.getProperty("hostname");
sid = prop.getProperty("sid");
user = prop.getProperty("user");
password = prop.getProperty("password");
System.out.println(hostname);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String url = String.format("jdbc:oracle:thin:@%s:1521:%s", hostname, sid);
Connection con = DBConn.getConnection(url, user, password); //겟컨넥션 f3
//CRUD
ArrayList<EmpDTO> list = null;
Statement stmt = null;//일꾼객체
ResultSet rs = null;//저장객체
EmpDTO dto = null;
String sql = "SELECT DEPTNO, EMPNO, ENAME, SAL+NVL(COMM,0) pay, HIREDATE"
+" FROM EMP";
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
//list = new ArrayList<EmpDTO>(); //왜 처음부터 이렇게 안주고
//null준다음에 이렇게 해 ?
// => 만약에 select 한 결과가 하나도 존재하지 않으면 new ArrayList()할 필요 없잖아
//사원이 존재하지 않을 수도 있으니까
if(rs.next()) { //최소 사원한명이라도 존재하면
list = new ArrayList<EmpDTO>();
do {
dto = new EmpDTO();
dto.setDEPTNO(rs.getInt("DEPTNO"));
dto.setEMPNO(rs.getInt("EMPNO"));
dto.setENAME(rs.getString("ENAME"));
// pay 값은 저장 아직 안함
dto.setHIREDATE(rs.getDate("HIREDATE"));
list.add(dto);
}while (rs.next());
} //사원 없으면 if문 자체가 거짓이니 list도 null이고 new로 생성하지 않을 것
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
rs.close();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DBConn.close();
//출력
if(list != null) {
Iterator<EmpDTO> ir = list.iterator();
while (ir.hasNext()) {
dto = ir.next();
System.out.printf("%d\t%d\t%s\t%s\n"
, dto.getDEPTNO(), dto.getEMPNO(), dto.getENAME(), dto.getHIREDATE());
}
}else {
System.out.println("사원이 존재하지 않습니다");
}
System.out.println("END");
}
}
반응형
'JDBC' 카테고리의 다른 글
[days03] PreparedStatement - 사원 추가, 수정, 삭제 (0) | 2020.11.25 |
---|---|
[days03] 문제) 부서별 소속 사원수 정렬하여 출력 (0) | 2020.11.25 |
[days03] 사원 조회, 추가, 삭제 (0) | 2020.11.25 |
[days02] DEPT 테이블 조회, 추가, 수정, 삭제, 검색 (0) | 2020.11.25 |
[days02] 싱글톤 클래스 작성 (0) | 2020.11.24 |
Comments