티스토리 뷰

학습정리-12-02.txt
0.00MB

1. 아래의 문제를 푸시오.
-아래를 구현하시오.
DTO -  클래스 EmpDept

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.sql.Date; // import할 때 주의!
 
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 EmpDto(int empno, String ename, String job, int mgr, Date hiredate, 
                    int sal, int comm, int deptno) {
        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 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;
    }
 
    
}
cs

 

 

DAO - 함수 작성 -위의 객체를 ArrayList로 담는 함수 작성

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.sql.Connection;
import java.sql.Date; // 꼭 sql로!!
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
 
 
import edu.kosmo.ex.dto.EmpDto;
 
 
public class EmpDao {
    private String driver = "oracle.jdbc.driver.OracleDriver";
    private String url = "jdbc:oracle:thin:@localhost:1521:xe";
    private String uid = "scott";
    private String upw = "tiger";
    
    public EmpDao(){    
        try {
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public ArrayList<EmpDto> empSelect(){
        ArrayList<EmpDto> etos = new ArrayList<>();
        
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            String query = "SELECT * FROM emp";
            con = DriverManager.getConnection(url, uid, upw);
            stmt = con.createStatement();
            rs = stmt.executeQuery(query);
            
            while(rs.next()) {
                int empno = rs.getInt("empno");
                String ename = rs.getString("ename");
                String job = rs.getString("job");
                int mgr = rs.getInt("mgr");
                Date hiredate = rs.getDate("hiredate");
                int sal = rs.getInt("sal");
                int comm = rs.getInt("comm");
                int deptno = rs.getInt("deptno");
                
                
                EmpDto eto = new EmpDto(empno, ename, job, mgr, 
                                    hiredate, sal, comm, deptno); 
                
                etos.add(eto);
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(rs != null)
                    rs.close();
                if(stmt != null)
                    stmt.close();
                if(con != null)
                    con.close();
                
            } catch (Exception e2) {
                
            }
        }
        
        return etos;
    }
        
}
 
cs

 

 

12명의 아래의 정보 출력
- 사원번호, 사원 이름, 부서명 , 부서 위치 
-el 및 jstl을 사용 할것
 jstl을 사용하려면 먼저 jstl을 다운받은 뒤, 해당 알집 안에 들어있는 lib 폴더에서 jstl.jar 파일과 standard.jar 파일 두 개를

이클립스 프로젝트 폴더의 wepapp - lib 폴더에 넣어 주어야한다!

그리고  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 도 잊지말고 넣어주기!

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<%@page import="edu.kosmo.ex.dao.EmpDao"%>
<%@page import="edu.kosmo.ex.dto.EmpDto"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--jstl을 사용하려면 아래 거 잊지말고 꼭 써주기-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
 <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" 
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" 
    integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" 
    crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body class="container">
<%    
EmpDao empDao = new EmpDao();
ArrayList<EmpDto> etos = empDao.empSelect();
 
pageContext.setAttribute("etos", etos);
%>
<table class="table text-center table-striped">
    <tr class="table-info">
        <td>사원 번호</td>
        <td>사원 이름</td>
        <td>직종</td>
        <td>매니저 번호</td>
        <td>입사 날짜</td>
        <td>급여</td>
        <td>보너스</td>
        <td>부서 번호</td>
    </tr>
 
    <c:forEach var="eto" items="${etos}">
        <tr>
            <td>${eto.empno}</td>
            <td>${eto.ename}</td>
            <td>${eto.job}</td>
            <td>${eto.mgr}</td>
            <td>${eto.hiredate}</td>
            <td>${eto.sal}</td>
            <td>${eto.comm}</td>
            <td>${eto.deptno}</td>            
        </tr>
        
    </c:forEach>
</table>
 
 
 <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" 
    integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" 
    crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" 
    integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" 
    crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" 
    integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" 
    crossorigin="anonymous"></script>
</body>
</html>
 
cs

 

 


2. 4개의 영역(Scope)에 대하여 설명하시오.

영역이란 웹 서버에서 객체 또는 변수가 생성된 후 유지 되는 범위를 말한다.

pageScope - 해당 페이지에서만 유지 시킨다. (다른 페이지에서는 절대 사용불가) 범위가 가장 좁다.

requestScope - forwarding까지  유지 시킨다. (request는 request객체를 뜻한다.)

 

page와 request 영역의 차이는 ?? request는 다시 response하기 전까지 살아있다.
포워딩할때는 request 객체가 살아있다! 포워딩하는 다른 페이지에서 사용 가능.

 

sessionScope - (session 객체)정해진 시간에 따라 유지 시킨다.(디폴트값을 30분)

applicationScope - 프로젝트 끝날때 까지(어플리케이션이 종료 될 때 까지)  유지시킨다.

 

 

 


3. 아래의 조인에 대하여 설명하시오.
-등가조인

조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 조인 기법이다.

-- 사원 정보를 출력할 때, 각 사원이 소속된 부서의 상세 정보를 출력
SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;

 


-비등가 조인

동일 컬럼이 없이 다른 조건을 사용하여 조인 할 떄 쓰인다.

EQUI JOIN과 NON-EQUI JOIN의 차이점

EQUI JOIN : JOIN조건에 서로 다른 조건(=)을 가진 데이터를 JOIN해서 가져오는 방법

NON-EQUI JOIN : 같은 조건이 아닌 크거나 작거나 하는 경우 JOIN을 수행하는 방법

 

-- 각 사원의 급여가 몇 등급인지 살펴보는 쿼리문
SELECT * FROM salgrade, emp WHERE sal BETWEEN losal and hisal;

 


-셀프 조인

자기 자신과 조인을 하는 기법이다.

조인은 서로 다른 두 개의 테이블을 연결하기도 하지만 하나의 테이블 내에서 조인을 해야만 자료를 얻을 수 있는 경우에 쓰인다.

-- 이름이 SMITH인 사원의 매니저 이름(자기 자신의 두번 join!..self join)
SELECT * FROM emp e1, emp e2 WHERE e1.mgr = e2.empno and e1.ename = 'SMITH';
 
SELECT employee.ename ||'의 매니저는 '|| manager.ename|| '입니다.'
FROM emp employee, emp manager
WHERE employee.mgr = manager.empno;

 

 

4. 아래의 SQL 문을 작성하시오.
-모든 사원의 이름,직업,부서이름,급여 및 등급을 출력하라.
-12명 사원의 메이져 이름을 출력하시오.
-Smith보다 늦게 입사한 사원의 이름 및 입사일을 출력하라.

1
2
3
4
5
6
7
8
9
10
11
-- 모든 사원의 이름,직업,부서이름,급여 및 등급을 출력하라.
SELECT * FROM salgrade s, emp e, dept d WHERE e.deptno = d.deptno and e.sal 
BETWEEN s.losal AND s.hisal;
 
-- 12명 사원의 매니져 이름을 출력하시오. 
SELECT e1.ename 사원, e2.ename 매니져 FROM emp e1, emp e2 WHERE e1.mgr = e2.empno;
-- KING의 mgr은 null이기 때문에 출력하면 11명 나온다!
 
-- Smith보다 늦게 입사한 사원의 이름 및 입사일을 출력하라.
SELECT ename, hiredate FROM emp WHERE hiredate 
    > (SELECT hiredate FROM emp WHERE ename = 'SMITH');
cs

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
32
33
34
35
36
37
38
39
40
41
-- join 
SELECT * FROM emp, dept; -- 카테이션 곱
 
-- 사원 정보를 출력할 때, 각 사원이 소속된 부서의 상세 정보를 출력
SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;
 
-- 이름이 KING인 사람의 부서명을 출력
SELECT e.ename, d.dname FROM emp e, dept d 
WHERE e.deptno = d.deptno and ename = 'KING';
 
-- SMITH가 속한 부서 위치
SELECT e.ename, d.dname, d.loc FROM emp e, dept d 
WHERE e.deptno = d.deptno and ename = 'SMITH';
 
-- 각 사원의 급여가 몇 등급인지 살펴보는 쿼리문
SELECT * FROM salgrade;
SELECT * FROM salgrade, emp WHERE sal BETWEEN losal and hisal;
 
-- 한 명의 사원 이름과 소속 부서명, 급여 등급을 출력하는 쿼리문
-- (3개의 테이블 EMP, DEPT, SALGRADE 조인)
SELECT * FROM salgrade s, emp e, dept d WHERE e.deptno = d.deptno and e.sal 
BETWEEN s.losal AND s.hisal;
 
-- 이름이 SMITH인 사원의 매니저 이름(자기 자신의 두번 join!..self join)
SELECT * FROM emp e1, emp e2 WHERE e1.mgr = e2.empno and e1.ename = 'SMITH';
 
SELECT employee.ename ||'의 매니저는 '|| manager.ename|| '입니다.'
FROM emp employee, emp manager
WHERE employee.mgr = manager.empno;
 
 
-- 서브 쿼리 (select문이 두번 들어간다)
-- 사원들의 평균 급여보다 더 많은 급여를 받는 사원을 검색하는 쿼리문
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp); -- 소괄호 사용하기
 
-- scott의 부서명을 알아내는 쿼리문
SELECT * FROM dept WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SMITH');
-- 하나의 컬럼을 모두 출력해야 할때는 join을 써야한다....
 
-- SMITH의 급여와 동일하거나 급여를 더 많이 받는 사원과 급여를 출력하는 쿼리문
SELECT * FROM emp WHERE sal >= (SELECT sal FROM emp WHERE ename = 'SMITH');
 
-- 입사일이 BLAKE 이후인 사원
SELECT * FROM emp WHERE hiredate > (SELECT hiredate FROM emp WHERE ename = 'BLAKE');
cs

8번
11 이 1초과 100 미만의 숫자인가?
22 가 2의 배수 또는 3의 배수 숫자인가 ?
위의 결과를 나타내시오.true false 로

9번
국영수 총점 평균 및 수우미양가출력

66번

. 아래의 cookie_set.jsp 파일에 대하여
cookie get 를 클릭하면 모든 쿠키 값을 출력하는 cookie_get.jsp를 만드시오.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
        Cookie cookie = new Cookie("CookieN","CookieV"); //쿠키객체생성
        cookie.setMaxAge(60*60); //쿠키 시간 설정
        
        response.addCookie(cookie);
%>

        <a href="cookie_get.jsp">cookie get</a>

</body>
</html>

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함