본문 바로가기

bitcamp/JSP

JSP_게시판 작성을 위한 DB 맛보기!

1. DB란?

· 일상생활에서 수 없이 다양하고 많은 데이터들이 사용되는데, 많은 데이터를 관리하기 위한 수단으로 데이터베이스가 사용된다.

· DB는 여러 사람이 공유하고 사용할 목적으로 통합하여 관리되는 데이터의 집합으로 서로 관련있는 데이터들의 모임이다.
· 데이터베이스는 데이터의 추가, 삭제, 이동 등의 기능이 쉽게 되어있어 사용자에게 빠른 시간 내에 제공한다.

  이 때 데이터베이스를 관리하는 도구로 사용되는 시스템이 DBMS이다.

 

2. DBMS의 의미와 종류는? 

· Data Base Management System의 약자로, 데이터베이스 관리 시스템을 뜻하며, 데이터베이스를 조작하는 별도의

 소프트웨어를 말한다.
· 종류로는 Oracle(오라클에서 개발), SQLServer, MySQL, MSSQL 등이 사용된다.

 

3. JDBC란?

· Java에서 DB를 프로그래밍 하기 위해 사용되는 API(DB 관련 라이브러리)로 각각의 제조사별로 존재한다.

· DBMS가 제조사마다 다르기 때문에 Java에서 DB를 사용하기 위해서는 제조사별 JDBC를 사용하여 SQL문을 

 실행하고 결과값을 출력한다. (DB 설치 시 자동으로 JDBC 파일이 생성되어 java lib에 복사하여 사용)

4. JDBC와 연결과정

1) class.forName(driver);

  : oricleDriver를 객체 생성하여 메모리에 저장

2) 사용하려는 제조사의 DB를 복사해 둔 상태로 java에서는 DB 내용을 받아 사용하기 위해 3종 세트의 객체를 생성

   : Connection, Statement, ResultSet 구현해서 사용

3) connection = DriverManager.getConnection(url, uid, upw);

  : 해당 url에 유입해서 id와 pw를 통해 접속 성공 시, connection 객체를 생성하고 DB와 연결 상태를 유지

4) 접속 후 connection의 쿼리용 객체(Statement)를 이용하여 SQL문 실행

5) Result 객체를 이용하여 결과 값을 받아 클라이언트에 응답

 

5. 커넥션풀

· 클라이언트에서 다수의 요청이 발생할 경우 서버와 DB의 연결과정에서 과부하가 발생되어 서버가 다운되는 현상이

  발생된다. connection = DriverManager.getConnection(url, uid, upw) 이 과정에서 많이 다운됨!

· 이러한 문제점을 고안하여 제작한 방법이 커넥션풀이며, 사전에 서버에 connection 객체를 생성해 풀 속에

  저장해두었다가 접속자가 많아지면 다량의 수를 받아낸다.

· 커넥션이 부족한 경우, 즉 정해진 수를 초과하는 경우 클라이언트는 대기 상태로 전환되고 1명의 정보를 받아

  응답한 후에 다음 대기자를 받아 응답하는 방식으로 처리한다.

 

※DAO란?

  Data Access Object의 약자로, 데이터 추가/삭제/수정 등의 작업을 수행하는 클래스이다.(로직 부분 담당)

 

※DTO란?

  Data Transfer Object의 약자로, 일반적으로 로직을 가지고 있지 않은 순수한 데이터 객체이며,

  속성과 그 속성에 접근하기 위한 getter, setter 메소드를 지닌 클래스이다.

 

6. 커넥션풀 사용 방법

· 아래와 같이 커넥션풀 객체를 생성하여 사용되며, 기존에는 Statement 객체를 사용하여 SQL문을 실행했었지만

  중복코드가 많아지는 단점을 보완한 PreparedStatement를 주로 사용한다.

※연습문제

♣커넥션풀을 이용하여 emp 리스트를 출력하시오

 

<구현 화면>

 

<emp.jsp>

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
 <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
 <%! 
    Connection connection;
    Statement statement;
    ResultSet resultSet;
    
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String uid = "scott";
    String upw = "tiger";
    String query = "select * from emp";
 %>
 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="EUC-KR">
 <title>Insert title here</title>
 </head>
 <body>
   <table border="1">
        <tr>
            <td>EMPNO</td>
            <td>ENAME</td>
            <td>JOB</td>
            <td>MGR</td>
            <td>HIREDATE</td>
            <td>SAL</td>
            <td>COMM</td>
            <td>DEPTNO</td>    
        </tr>
        <
            try{
                Class.forName(driver);
            
                connection = DriverManager.getConnection(url,uid,upw);
                statement = connection.createStatement();
                resultSet = statement.executeQuery(query);
            
                while(resultSet.next()){
                    String empno = resultSet.getString("EMPNO");
                    String ename = resultSet.getString("ename");
                    String job = resultSet.getString("job");
                    String mgr = resultSet.getString("mgr");
                    String hiredate = resultSet.getString("hiredate");
                    String sal = resultSet.getString("sal");
                    String comm = resultSet.getString("comm");
                    String deptno = resultSet.getString("deptno");            
        %>
            <tr>
                <td><%=empno%></td>
                <td><%=ename%></td>
                <td><%=job%></td>
        <%
                    if(mgr==null){
                        out.print("<td>" + "\t" + "</td>");
                    }else
                        out.print("<td>" + mgr + "</td>");
        %>
                <td><%=hiredate%></td>
                <td><%=sal%></td>
        <%
                    if(comm==null){
                        out.print("<td>" + "\t" + "</td>");
                    }else
                        out.print("<td>" + comm + "</td>");
        %>
                <td><%=deptno%></td>
            </tr>
        <
                }
        %>
 
        <%
            }catch(Exception e){                
            }finally{
                try{
                    if(resultSet != null
                        resultSet.close();
                    if(statement != null
                        statement.close();
                    if(connection != null
                        connection.close();
                }catch(Exception e){
                }
            }
        %>
    </table>
 </body>
 </html>
 
cs

 

 

 

'bitcamp > JSP' 카테고리의 다른 글

JSP_MVC패턴  (0) 2021.02.12
SQL문  (0) 2021.02.12
JSP_bean_연습문제  (0) 2021.02.11
JSP_쿠키/섹션/Bean/EL  (0) 2021.02.11
JSP_연습문제  (0) 2021.02.11