package edu.global.emp.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import edu.global.emp.dto.EmpDto;
public class EmpDao {
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String user = "scott";
private String pwd = "tiger";
public EmpDao() {
try {
Class.forName(driver);
System.out.println("드라이버 검색 성공");
} catch (Exception e) {
e.printStackTrace();
}
}
public List getEmps(){
List emps = new ArrayList<>();
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs= null;
String sql = "select * from emp";
try {
connection = DriverManager.getConnection(url,user,pwd); //DB 연결
pstmt = connection.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
EmpDto emp = new EmpDto();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emps.add(emp);
}
} catch (Exception e) {
// TODO: handle exception
}
return emps;
}
}-dto
package edu.global.emp.dto;
import java.sql.Timestamp;
//이름 널? 유형
//-------- -------- ------------
//EMPNO NOT NULL NUMBER(4)
//ENAME VARCHAR2(10)
//JOB VARCHAR2(9)
//MGR NUMBER(4)
//HIREDATE DATE
//SAL NUMBER(7,2)
//COMM NUMBER(7,2)
//DEPTNO NUMBER(2)
public class EmpDto {
private int empno;
private String ename;
private String job;
private int mgr;
private Timestamp hiredate;
private int sal;
private int comm;
private int deptno;
public EmpDto() {}
public EmpDto(int empno, String ename, String job, int mgr, Timestamp hiredate) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
public int getComm() {
return comm;
}
public void setComm(int comm) {
this.comm = comm;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getMgr() {
return mgr;
}
public void setMgr(int mgr) {
this.mgr = mgr;
}
public Timestamp getHiredate() {
return hiredate;
}
public void setHiredate(Timestamp hiredate) {
this.hiredate = hiredate;
}
}
package edu.global.emp;
import java.util.List;
import edu.global.emp.dao.EmpDao;
import edu.global.emp.dto.EmpDto;
public class EmpMain {
public static void main(String[] args) {
EmpDao dao = new EmpDao();
List emps = dao.getEmps();
for (EmpDto emp : emps) {
System.out.print("사원번호" + emp.getEmpno());
System.out.println("사원번호" + emp.getEname());
System.out.println("사원번호" + emp.getJob());
System.out.println("사원번호" + emp.getMgr());
System.out.println("사원번호" + emp.getHiredate());
System.out.println("사원번호" + emp.getSal());
System.out.println("사원번호" + emp.getComm());
System.out.println("사원번호" + emp.getDeptno());
}
}
}
JDBC를 통해 데이터베이스에 연결하는 객체
DriverManager 클래스의 getConnection() 메소드로 생성할 수 있다.
연결이 종료되면 close() 메소드를 호출하여 닫아야 한다
SQL 문을 미리 컴파일하여 저장하는 객체.
SQL 문을 실행할 때마다 컴파일할 필요가 없기 때문에 성능이 향상.
setXXX() 메소드를 사용하여 SQL 문에 매개변수를 설정할 수 있다.
데이터베이스로부터 조회된 결과를 저장하는 객체.
ResultSet 객체는 커서를 사용하여 조회된 결과를 한 줄씩 읽을 수 있다.
getXXX() 메소드를 사용하여 ResultSet 객체의 각 열에서 데이터를 가져올 수 있다.
DTO
데이터를 전달하는 객체
데이터베이스에 대한 액세스를 제공하는 객체
컨트롤
DDL : 테이블에 관련된 것
DML : 데이터 조작
DCL: 오라클 컨트롤
WHERE 1=0 조건은 항상 거짓이므로 SELECT * FROM DEPT WHERE 1=0 쿼리는 DEPT 테이블의 아무런 행도 반환하지 않는다.
조건을 만족하는 행이 하나라도 있으면 참을 반환
조건을 만족하는 모든 행이 참이어야 참을 반환
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP WHERE SAL >=3000);
-- 부서 번호가 30번인 사원들의 급여 중 가장 낮은 값(800)보다 높은 급여를 받는 사원의 이름, 급여를 출력하는 쿼리문
SELECT * FROM EMP WHERE DEPTNO = 30
AND SAL > (SELECT MIN(SAL) FROM EMP);
--30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름과 급여를 출력하는 쿼리문
SELECT ENAME, SAL FROM EMP WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DEPTNO = 30);
SELECT ENAME, SAL FROM EMP WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 30);
DELETE 는 특정 조건을 만족하는 행을 삭제. 예를 들어, DELETE FROM table WHERE id = 1 명령어는 table 테이블에서 id 값이 1인 행을 삭제
TRUNCATE 명령어는 테이블의 모든 행을 삭제. TRUNCATE TABLE table 명령어는 table 테이블의 모든 행을 삭제.
DROP 명령어는 테이블을 삭제. DROP TABLE table 명령어는 table 테이블을 삭제
10.데이터 딕셔너리 란?
데이터베이스에 저장된 데이터의 구조와 의미를 설명하는 문서
데이터베이스의 설계, 개발, 유지 관리, 보안, 성능 최적화 역할