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 |