티스토리 뷰

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

1. 아래의 문제를 푸시오.
-DTO  = emp Dto 클래스 

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
import java.sql.Date;
 
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  =  emp Dao 클래스

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
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

 

 

EL을 쓰라는데 도저히 못쓰겠다.........ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

emp_select.jsp
 -> emp 테이블에 있는 내용을(ArrayList 객체)를 세션에 저장
 ->emp 테이블에 있는 내용을 전부 유저에게 출력하여 보여주는 페이지(해당 세션에서 꺼내어)

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
<%@page import="javax.websocket.Session"%>
<%@page import="edu.kosmo.ex.dto.EmpDto"%>
<%@page import="edu.kosmo.ex.dao.EmpDao"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>
 
<%
 
EmpDao empDao = new EmpDao();
ArrayList<EmpDto> etos = empDao.empSelect();
session.setAttribute("emp", etos);
 
for(int i = 0; i < etos.size(); i++){
    EmpDto eto = etos.get(i);
    out.print("사원 번호: " + eto.getEmpno() + "<br>" +
            "사원 이름: " + eto.getEname() + "<br>" +
            "직종: " + eto.getJob() + "<br>" +
            "mgr: " + eto.getMgr()+ "<br>" +
            "입사 날짜: " + eto.getHiredate()+ "<br>" +
            "급여: " + eto.getSal() + "<br>" +
            "커미션: " + eto.getComm() + "<br>" +
            "부서 번호: " + eto.getDeptno() + "<br>" 
            + "----------------------------<br>");
    
}
 
%>
 
</body>
</html>
cs

 


emp_select2.jsp
 ->emp_select.jsp 에서 세션에 저장한 ArrayList 객체를 이용하여 
 ->emp 테이블에 있는 내용을 전부  출력

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
<%@page import="edu.kosmo.ex.dto.EmpDto"%>
<%@page import="java.util.ArrayList"%>
 
<%@ 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>
<%
 
ArrayList<EmpDto> etos = (ArrayList<EmpDto>)session.getAttribute("emp");
 
for(int i = 0; i < etos.size(); i++){
    EmpDto eto = etos.get(i);
    out.print("사원 번호: " + eto.getEmpno() + "<br>" +
            "사원 이름: " + eto.getEname() + "<br>" +
            "직종: " + eto.getJob() + "<br>" +
            "mgr: " + eto.getMgr()+ "<br>" +
            "입사 날짜: " + eto.getHiredate()+ "<br>" +
            "급여: " + eto.getSal() + "<br>" +
            "커미션: " + eto.getComm() + "<br>" +
            "부서 번호: " + eto.getDeptno() + "<br>" 
            + "----------------------------<br>");
    
}
%>    
 
</body>
</html>
cs

 


2. 아래의 개념을 설명하시오.
-DBCP
(DataBase Connection Pool)

WAS(웹 어플리케이션 서버)에 클라이언트들에게 다수의 요청이 발생할 경우(동시 접속자가 많을 경우) 데이터베이스에 부하가 발생해 서버가 죽는 경우가 발생한다.

정확히 말하자면 사실 서버에서 죽는게 아니다. 서버는 모든 요청을 받아낼 수 있지만 서버에서 데이터베이스로 연결하는 과정에서 죽는다. 

즉, Connection 객체 생성하는 과정에서 죽는다는 말이다.  왜냐하면 데이터베이스에 연결하는데는 비용이 많이 든다.(메모리를 많이 잡아먹고, 걸리는 시간도 길다)

→ con = DriverManager.getConnection(url, uid, upw); 동접자가 많으면 여기서 죽는다....(개별 진척도 68번 문제가 일일이 접속할 때마다 케넥션 객체를 생성하는 방식)

 

이러한 문제를 해결하기 위해 나타난 것이 커넥션 풀이다. 커넥션 풀은 커넥션 객체를 미리 몇 개를 만들어 놓고, 접속하는 클라이언트에게 돌려 쓴다. 예를 들면 커넥션 객체 10개를 만들어놨을 경우11명이 접속하면 11명째는 한명이 다 쓸 때까지 기다렸다가 커넥션 객체를 받아서 쓴다. (선착순으로 만들어둔 커넥션 배분)

커넥션 객체, 커넥션 풀은 오라클이 관리하는게 아니라 서버에서 관리한다. 커넥션 풀 설정은 context.xml에서 한다.(톰캣의 경우이고, 다른 회사일 경우에는 방식이 다르다)

https://luckyguystory.tistory.com/83

 

 


-EL(Expression language)

JSP 2.0에서 새롭게 추가된 스크립트 언어

기존의 Script tag의 표현식(<%= 정보 %>) tag에서 업그레이드된 버전 ( ${ 정보 } )

값을 JSP의 표현식 <%= %>이나 액션 태그 <jsp:useBean>를 사용하는것 보다 쉽고 간결하게 꺼낼수 있게 하는 기술이다.

[ 주요 특징 ]
1) JSP 속성영역 (request,  response, session, application) 저장된 속성 객체의 property를 출력한다 
2) 리터럴 데이터, 다양한 연산결과 출력이 가능하다 
3) JSTL과 연동이 가능하다

더보기

 

 

 


5. SQL  정리
- 가장 높은 급여와 가장 낮은 급여를 구하는 쿼리문
- '20,000'과 '10,000'의 차이를 알아보기 위해서 빼기(-)연산을 구하는 쿼리문
- 각 사원의 연봉 계산을 하는 쿼리문
- 중복 제거를 반영하여 담당업무의 개수를 구하는 쿼리문
-부서의 최대값과 최소값을 구하되, 최대 급여가 2900 이상인 부서만 출력하는 쿼리문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 가장 높은 급여와 가장 낮은 급여를 구하는 쿼리문
SELECT MAX(sal), MIN(sal) FROM emp;
 
-- '20,000'과 '10,000'의 차이를 알아보기 위해서 빼기(-)연산을 구하는 쿼리문
SELECT TO_NUMBER('20,000''99,999'- TO_NUMBER('10,000''99,999'FROM dual;
 
-- 각 사원의 연봉 계산을 하는 쿼리문
SELECT ename, sal + NVL(comm, 0FROM emp;
 
-- 중복 제거를 반영하여 담당업무의 개수를 구하는 쿼리문
SELECT COUNT(DISTINCT job) FROM emp;
 
--부서의 최대값과 최소값을 구하되, 최대 급여가 2900 이상인 부서만 출력하는 쿼리문
SELECT deptno, MAX(sal), MIN(sal) FROM emp GROUP BY deptno HAVING MAX(sal) >= 2900;
cs

 

-카테이션 곱에 대하여 설명하시오.

엄밀히 말하면 조인이라고 할 수 없는 조인으로 WHERE 절에 조인 조건을 주지 않는 것을 말합니다.

두 테이블을 기준으로 FROM 절에는 두 개의 테이블을 명시하지만 WHERE 절에서 조인 조건을 주지 않습니다.

그 결과 두 테이블의 데이터를 기준으로 가능한 모든 조합의 데이터가 조회된다.

 


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
95
-- '20,000'과 '10,000'의 차이를 알아보기 위해서 빼기(-) 연산을 구하는 쿼리문
SELECT TO_NUMBER('20,000''99,999'- TO_NUMBER('10,000''99,999'FROM dual;
-- 문자를 숫자로 바꿔서 빼기 연산
 
-- NULL을 다른 값으로 변환하는 NVL함수
-- 연봉(sal + comm) 계산을 하는 쿼리문
-- SELECT ename, sal, comm, job FROM emp ORDER BY job;
SELECT ename, sal + NVL(comm,0), job FROM emp ORDER BY job; -- null값을 0으로
 
 
-- 선택을 위한 DECODE 함수 명령어(switch문을 생각해...)
-- 사원의 부서 번호를 이름으로 설정하는 쿼리문
SELECT deptno, DECODE(deptno, 10'A'20'B''default'FROM emp ORDER BY deptno;
SELECT deptno, DECODE(deptno, 10'accounting'20'research'30'sales') as dname FROM emp;
 
 
-- CASE 함수 (if ~ else문)
-- 부서 번호에 해당하는 부서명을 구하는 쿼리문
SELECT ename, deptno,
    CASE WHEN deptno=10 THEN 'ACCOUNTING'
    WHEN deptno=20 THEN 'RESEARCH'
    WHEN deptno=30 THEN 'SALES'
    WHEN deptno=40 THEN 'OPERATIONS'
    END AS dname FROM emp;
    
    
-- 그룹 함수
--하나 이상의 행을 그룹으로 묶어 연산하여, 하나의 결과를 나타내는 함수이다.
SELECT * FROM emp;
SELECT SUM(sal) FROM emp; -- 결과가 하나다!
 
-- 커미션 총액을 구하는 쿼리문
SELECT SUM(NVL(comm,0)) FROM emp; 
SELECT SUM(comm) FROM emp; 
-- 그룹함수는 null값을 연산에서 제외하기 때문에...nvl 안써도 값이 제대로 출력된다.
 
-- 급여 평균
SELECT AVG(sal) FROM emp;
 
-- 가장 높은 급여와 가장 낮은 급여 출력
SELECT MAX(sal), MIN(sal) FROM emp;
SELECT ename, MIN(sal) FROM emp; -- 오류!!
-- 그룹 함수는 하나의 칼럼을 그룹으로 만들어 연산하는 것이기 때문에 ename과 sal은 서로 다른 칼럼이라 그룹으로 만들어지지 않음
 
-- 전체 사원의 수
SELECT COUNT(*FROM emp;
-- count 함수에 특정 컬럼을 기술하는 경우 해당 컬럼 값을 갖고 있는 로우의 개수를 계산하여 반환한다.
SELECT COUNT(comm) FROM emp; -- null은 제외
 
-- 중복 제거를 반영하여 담당업무의 개수를 구하는 쿼리문
SELECT COUNT(DISTINCT job) FROM emp;
 
 
-- GROUP BY 절 (~별, 부서별 등등)
-- 특정 컬럼을 기준으로 그룹화하여 테이블에 존재하는 행들을 그룹별로 구분하기 위해 사용한다.
-- 사원 테이블을 부서 번호로 그룹 짓는 쿼리문
SELECT deptno FROM emp GROUP BY deptno;
SELECT DISTINCT deptno FROM emp;
 
-- 소속 부서별 평균 급여를 구하는 쿼리문
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;
SELECT ename, deptno, AVG(sal) FROM emp GROUP BY deptno; -- 오류!
-- ename은 그룹으로 만들 수가 없...공통된게 없...group by 컬럼과 select 컬럼은 같은게 와야한다.
 
-- 소속 부서별 급여 총액과 평균 급여를 구하는 쿼리문
SELECT deptno, SUM(sal) ,AVG(sal) FROM emp GROUP BY deptno;
 
SELECT ename FROM emp GROUP BY ename; -- 되긴하는데 의미가...?ㅋㅋㅋ동명이인이 있으면 그룹지어지긴 하는데..
 
-- job별로 평균 급여
SELECT job, AVG(sal) FROM emp GROUP BY job;
 
-- 소속 부서별 최대 급여와 최소 급여를 구하는 쿼리문
SELECT deptno, MAX(sal), MIN(sal) FROM emp GROUP BY deptno;
 
-- 부서별 사원의 수와 커미션을 받는 사원의 수를 계산하는 쿼리문
SELECT deptno, COUNT(*), COUNT(comm) FROM emp GROUP BY deptno;
 
 
-- Having 절
-- 그룹 지어진 부서별 평균 급여가 2000 이상인 부서의 번호와 부서별 평균 급여를 출력하는 쿼리문
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno having AVG(sal) >= 2000;
 
-- 부서의 최대값과 최소값을 구하되, 최대 급여가 2900 이상인 부서만 출력하는 쿼리문
SELECT deptno, MAX(sal), MIN(sal) FROM emp GROUP BY deptno HAVING MAX(sal) >= 2900;
 
 
-- JOIN (각 테이블 별로 필요한 것만 뽑아서 합치는?)
SELECT * FROM emp;
DESC emp;
SELECT * FROM dept;
 
SELECT * FROM emp,dept;
 
-- 카티션 곱은 모든 경우의 수???
cs

 


10번
switch 문에서 아래의 프로그래밍을 짜시오.

1234 월 봄입니다.출력
5678 월 여름입니다.출력
9 10 11 12 월 겨울 입니다. 출력

======================
11번
int 변수 선언 후 임의로 값을 넣음.
해당 값이 짝수 이면 "짝수 입니다" 출력
해당 값이 홀수 이면 "홀수 입니다" 출력
=========================

개별 전척도.
68번
-DTO  = emp Dto 클래스 
-DAO  =  emp Dao 클래스
emp_select.jsp ->emp 테이블에 있는 내용을 전부 유저에게 출력하여 
보여주는 페이지

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함