코드
package google_docs_emp.DTO; import java.sql.Date; //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 Date hiredate; private int sal; private int comm; private int deptno; public EmpDTO() { } 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 Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } 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; } @Override public String toString() { return "empno : " + empno + " ename : " + ename + " job : " + job + " mgr : " + mgr + " hiredate : " + hiredate + " sal : " + sal + " comm : " + comm + " deptno : " + deptno; } }
package google_docs_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 google_docs_emp.DTO.EmpDTO; public class EmpDAO { private String driver = "oracle.jdbc.OracleDriver"; private String url="jdbc:oracle:thin:@localhost:1521:xe"; private String user = "scott"; private String password = "tiger"; public EmpDAO() { try { Class.forName(driver); System.out.println("JDBC 연결 성공"); } catch (Exception e) { } } public List<EmpDTO> getAll() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = "select * from emp"; List<EmpDTO> empList = null; try { conn = DriverManager.getConnection(url, user, password); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); empList = new ArrayList<>(); 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.getDate("hiredate")); emp.setSal(rs.getInt("sal")); emp.setComm(rs.getInt("comm")); emp.setDeptno(rs.getInt("deptno")); empList.add(emp); } } catch (Exception e) { e.printStackTrace(); } return empList; } }
package google_docs_emp; import java.util.List; import google_docs_emp.DAO.EmpDAO; import google_docs_emp.DTO.EmpDTO; public class EmpMain { public static void main(String[] args) { EmpDAO dao = new EmpDAO(); List<EmpDTO> empList = dao.getAll(); for(EmpDTO emp : empList) System.out.println(emp); } }
- Connection connection : java와 db를 연결하는 객체, DriverManager class를 통해 connection을 받아오며, 통신 관리와 sql 실행 기능을 제공
- PreparedStatement pstmt : Sql쿼리 실행을 하기 위해 미리 컴파일된 객체. SQL 문의 매개 변수를 쉽게 설정 가능, 여러 번 실행 시 성능 향상. 인젝션 방지 기능도 제공.
- ResultSet rs : DB에서 검색된 결과 집합. Statement 또는 PreparedStatement 객체에서 실행된 Select 문의 결과를 저장하고 데이터를 읽을 수 있는 메서드를 제공. 특정 행을 (순서대로)가리키는 cursor 역할을 한다.
- DTO : Data Transfer Object. db와 통신할 때 데이터를 받아올 객체. 테이블에 해당하는 변수들이 field에 존재
- DAO : Database Access Object. db와 통신용으로 만드는 객체. 보통 connection, db에서 data를 가져오는 작업을 여기서 수행한다.
- DML : Data Manipulation Language. 데이터의 CRUD 작업을 수행합니다. SELECT, INSERT, UPDATE, DELETE 등의 SQL 문을 사용하여 데이터를 조작
- DCL : Data Control Language. 데이터베이스 사용자의 권한 관리와 데이터의 무결성을 제어하는 작업을 수행. 주로 GRANT, REVOKE 등의 SQL 문을 사용하여 사용자의 권한을 부여하거나 제거
- DDL : Data Definition Language. 데이터베이스의 구조를 정의하거나 변경하는 작업을 수행합니다. 주로 CREATE, ALTER, DROP 등의 SQL 문을 사용하여 테이블, 인덱스, 제약조건 등을 생성하거나 수정하고, 데이터베이스 객체를 삭제
CREATE TABLE DEPT03 AS SELECT * FROM DEPT WHERE 1=0;
SELECT * FROM DEPT WHERE 1=0;
여기서 dept의 모든 column을 가져오는데 where 1=0 조건을 보면 false이므로
column명을 만들어 놓고 아무 값도 가져오지 않는다. 그러므로 table의 column의 타입과 크기만 가져온다.
deptno dname loc
- any : any는 set에서 합집합(union)의 개념
- all : all은 set에서 교집합(intersection) 개념
연봉을 3000이상 받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 정보를 출력하는 쿼리문
select * from emp where deptno = any(select deptno from emp where sal >=3000); select * from emp where deptno in(select deptno from emp where sal >=3000);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 1 7934 MILLER CLERK 7782 82/01/23 1300 (null) 10 2 7839 KING PRESIDENT (null) 81/11/17 5000 (null) 10 3 7782 CLARK MANAGER 7839 81/06/09 2450 (null) 10 4 7902 FORD ANALYST 7566 81/12/03 3000 (null) 20 5 7566 JONES MANAGER 7839 81/04/02 2975 (null) 20 6 7369 SMITH CLERK 7902 80/12/17 800 (null) 20
부서 번호가 30번인 사원들의 급여 중 가장 낮은 값(800)보다 높은 급여를 받는 사원의 이름, 급여를 출력하는 쿼리문
select ename, sal, deptno from emp where sal > any( select sal from emp) and deptno = 30; select ename, sal, deptno from emp where sal > (select min(sal) from emp) and deptno = 30;
ENAME SAL DEPTNO 1 ALLEN 1600 30 2 WARD 1250 30 3 MARTIN 1250 30 4 BLAKE 2850 30 5 TURNER 1500 30 6 JAMES 950 30
30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름과 급여를 출력하는 쿼리문
select ename, sal, deptno from emp where sal > (select max(sal) from emp where deptno = 30); select ename, sal, deptno from emp where sal > all (select sal from emp where deptno = 30);
EMPNO SAL DEPTNO 1 JONES 2975 20 2 FORD 3000 20 3 KING 5000 10
- delete는 데이터를 지우는 것, truncate는 row를 전체 삭제하는 것, drop은 table 자체를 없애는 것.
- DB에 저장된 데이터에 대한 메타데이터를 관리하는 시스템. 데이터베이스 구조, 테이블, 열, 제약 조건 등의 정보를 제공. 이를 통해 데이터의 정의, 관계, 유형 등을 문서화하고, 데이터의 일관성과 정확성을 유지하며, 데이터 모델링 및 개발 프로세스에서 유용한 정보를 제공