TIL#25

DuBu·2023년 7월 12일
0

일본IT JAVA 연수과정

목록 보기
41/61
post-thumbnail

오라클 emp table을 출력하는 자바 프로그래밍을 쓰시오.

EmpDTO.java

import java.sql.Timestamp;
        
public class EmpDTO {
	private int empno;
	private String ename;
	private String job;
	private int mgr;
	private Timestamp hiredate;
	
	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;
	}
	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;
	}
	...(getter, setter)
}

EmpDAO.java

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("Success to search a driver");
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
		
		public List<EmpDTO> getEmps(){
			List<EmpDTO> emps = new ArrayList<>();
			
			Connection connection;
			PreparedStatement pstate;
			ResultSet rset;
			
			String sql = "select * from emp";
			
			try {
				connection = DriverManager.getConnection(url, user, pwd);
				pstate = connection.prepareStatement(sql);
				rset = pstate.executeQuery();
				
				while(rset.next()) {
					EmpDTO emp = new EmpDTO();
					emp.setEmpno(rset.getInt("empno"));
					emp.setEname(rset.getString("ename"));
					emp.setJob(rset.getString("job"));
					emp.setMgr(rset.getInt("mgr"));
					emp.setHiredate(rset.getTimestamp("hiredate"));
					emps.add(emp);
				}
			} catch (Exception e) {
				e.getMessage();
			}
			return emps;
		}
}

EmpMain.java(호출)

public class EmpMain {

	public static void main(String[] args) {
		EmpDAO empDao = new EmpDAO();
		
		List<EmpDTO> emps = empDao.getEmps();
		for (EmpDTO emp : emps) {
			System.out.print("empno " + emp.getEmpno() + '\t');
			System.out.print("ename " + emp.getEname() + '\t');
			System.out.print("job " + emp.getJob() + '\t');
			System.out.print("mgr " + emp.getMgr() + '\t');
			System.out.println("deptno " + emp.getDeptno());
		}
	}

}

아래의 객체에 대하여 설명하시오.

  • Connection connection

    Connection은 데이터베이스와 Java 애플리케이션 간의 연결을 나타내는 객체입니다. Connection을 사용하여 데이터베이스에 쿼리 또는 명령을 실행할 수 있습니다

  • PreparedStatement pstmt

    PreparedStatement는 미리 컴파일된 SQL 쿼리 문을 나타내는 객체입니다. PreparedStatement를 사용하여 데이터베이스에 쿼리를 실행할 때마다 쿼리 문의 매개 변수를 지정할 수 있습니다. 이로 인해 쿼리 문의 성능이 향상될 수 있습니다.

  • ResultSet rs

    ResultSet은 데이터베이스에서 검색한 결과를 나타내는 객체입니다. ResultSet은 테이블의 행과 열로 구성되어 있습니다. ResultSet을 사용하여 데이터베이스에서 검색한 데이터를 읽을 수 있습니다.

아래의 개념에 대하여 설명하시오.

  • DTO

    DTO(Data Transfer Object)는 데이터베이스 테이블의 열과 일치하는 속성을 포함하는 클래스입니다. DTO는 데이터베이스 테이블의 데이터를 Java 애플리케이션으로 전송하거나 Java 애플리케이션의 데이터를 데이터베이스 테이블로 전송하는 데 사용됩니다.

  • DAO

    DAO(Data Access Object)는 데이터베이스에 대한 액세스를 제공하는 클래스입니다. DAO는 데이터베이스 테이블에 데이터를 추가, 수정, 삭제 또는 조회하는 메서드를 포함합니다. DAO는 데이터베이스에 대한 액세스를 단순화하고 재사용성을 향상시키는 데 사용됩니다.

아래에 대하여 설명하시오.

-DML

DML(Data Manipulation Language)는 데이터베이스 테이블의 데이터를 조작하는 데 사용되는 SQL 문입니다. DML 문에는 INSERT, UPDATE, DELETE가 포함됩니다.

-DCL

DCL(Data Control Language)는 데이터베이스 테이블에 대한 액세스를 제어하는 데 사용되는 SQL 문입니다. DCL 문에는 GRANT, REVOKE가 포함됩니다.

-DDL

DDL(Data Definition Language)는 데이터베이스 테이블을 생성, 삭제, 변경하는 데 사용되는 SQL 문입니다. DDL 문에는 CREATE TABLE, DROP TABLE, ALTER TABLE이 포함됩니다.

아래의 쿼리에서 WHERE 1=0 의 의미는?

CREATE TABLE DEPT03 AS SELECT * FROM DEPT WHERE 1=0;
  • WHERE 1=0은 항상 거짓인 조건입니다. 따라서 CREATE TABLE DEPT03 AS SELECT * FROM DEPT WHERE 1=0;은 DEPT 테이블의 모든 행을 포함하는 새 테이블 DEPT03을 생성합니다.

다중행 쿼리에서 아래를 설명하시오.

  • any
    any는 집계 함수와 함께 사용되며 조건을 만족하는 행이 하나라도 있으면 true를 반환합니다. 예를 들어, SELECT COUNT(*) AS num_employees FROM employees WHERE salary > 100000;은 급여가 100,000 이상인 직원이 한 명 이상이면 1을, 그렇지 않으면 0을 반환합니다.

  • all
    all은 집계 함수와 함께 사용되며 조건을 만족하는 모든 행이 있으면 true를 반환합니다. 예를 들어, SELECT COUNT(*) AS num_employees FROM employees WHERE salary > 100000 AND department = 'engineering';은 급여가 100,000 이상이고 부서가 'engineering'인 직원이 모두 있으면 1을, 그렇지 않으면 0을 반환합니다.

아래 쿼리를 완성하시오.

-- 연봉을 3000이상 받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 정보를 출력하는 쿼리문

select ename,sal,deptno 
from emp
where deptno in (select distinct deptno from emp where sal >= 3000);

-- 부서 번호가 30번인 사원들의 급여 중 가장 낮은 값(800)보다 높은 급여를 받는 사원의 이름, 급여를 출력하는 쿼리문

select ename, sal from emp where sal > any (select min(sal) from emp where deptno = 30);

--30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름과 급여를 출력하는 쿼리문

select ename, sal from emp where sal > (select max(sal) from emp where deptno = 30);

DELETE, TRUNCATE, DROP 명령어의 차이점은?

DELETE, TRUNCATE, DROP은 모두 데이터베이스 테이블에서 데이터를 삭제하는 명령어입니다. 그러나 세 명령어는 다음과 같은 차이점이 있습니다.

DELETE는 WHERE 절을 사용하여 특정 조건을 만족하는 행만 삭제할 수 있습니다.
TRUNCATE는 테이블의 모든 행을 삭제합니다.
DROP은 테이블 자체를 삭제합니다.
DELETE 명령어는 TRUNCATE 명령어보다 더 유연합니다. 특정 조건을 만족하는 행만 삭제할 수 있으므로 데이터 손실을 방지할 수 있습니다. 그러나 TRUNCATE 명령어는 DELETE 명령어보다 빠릅니다. 테이블의 모든 행을 한 번에 삭제하기 때문입니다. DROP 명령어는 가장 강력한 명령어입니다. 테이블 자체를 삭제하기 때문에 데이터 손실을 복구할 수 없습니다.

DELETE, TRUNCATE, DROP 명령어를 사용할 때는 데이터 손실을 방지하기 위해 신중하게 사용해야 합니다.

0개의 댓글