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
은 데이터베이스와 Java 애플리케이션 간의 연결을 나타내는 객체입니다.Connection
을 사용하여 데이터베이스에 쿼리 또는 명령을 실행할 수 있습니다
PreparedStatement
는 미리 컴파일된 SQL 쿼리 문을 나타내는 객체입니다.PreparedStatement
를 사용하여 데이터베이스에 쿼리를 실행할 때마다 쿼리 문의 매개 변수를 지정할 수 있습니다. 이로 인해 쿼리 문의 성능이 향상될 수 있습니다.
ResultSet
은 데이터베이스에서 검색한 결과를 나타내는 객체입니다.ResultSet
은 테이블의 행과 열로 구성되어 있습니다.ResultSet
을 사용하여 데이터베이스에서 검색한 데이터를 읽을 수 있습니다.
DTO(Data Transfer Object)는 데이터베이스 테이블의 열과 일치하는 속성을 포함하는 클래스입니다. DTO는 데이터베이스 테이블의 데이터를 Java 애플리케이션으로 전송하거나 Java 애플리케이션의 데이터를 데이터베이스 테이블로 전송하는 데 사용됩니다.
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이 포함됩니다.
CREATE TABLE DEPT03 AS SELECT * FROM DEPT WHERE 1=0;
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는 WHERE 절을 사용하여 특정 조건을 만족하는 행만 삭제할 수 있습니다.
TRUNCATE는 테이블의 모든 행을 삭제합니다.
DROP은 테이블 자체를 삭제합니다.
DELETE 명령어는 TRUNCATE 명령어보다 더 유연합니다. 특정 조건을 만족하는 행만 삭제할 수 있으므로 데이터 손실을 방지할 수 있습니다. 그러나 TRUNCATE 명령어는 DELETE 명령어보다 빠릅니다. 테이블의 모든 행을 한 번에 삭제하기 때문입니다. DROP 명령어는 가장 강력한 명령어입니다. 테이블 자체를 삭제하기 때문에 데이터 손실을 복구할 수 없습니다.
DELETE, TRUNCATE, DROP 명령어를 사용할 때는 데이터 손실을 방지하기 위해 신중하게 사용해야 합니다.