본문 바로가기
DB/Oracle

JSP와 데이터베이스 연동-2

by avvin 2019. 5. 6.


각 회원 정보 테이블 출력


가변길이를 가진 List 사용(저장공간 활용 극대화 가능)


*Vector와 ArrayList와 다른 점 : Vector는 동기화된 메서드로 구성돼있기때문에 멀티스레드가 동시에 이 메서드들을 실행 할 수 없다. (= 스레드가 안전하다.)



MemberDAO.java

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package model;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
 
//오라클 데이터베이스에 연결하고 쿼리 사용 설정 후 
//select insert update delete 작업을 실행해주는 클래스
//모델2패턴, 반복적으로 사용하는 기능(중복해서 쓰는 소스는)은 메서드로 빼주는 것이 좋다
public class MemberDAO {
 
    // 오라클에 접속하는 소스를 작성
    String id = "system"// 접속 아이디
    String pass = "123456";
    String url = "jdbc:oracle:thin:@localhost:1521:XE";
 
    Connection con; // 데이터베이스에 접근할 수 있도록 설정해주는 객체
    PreparedStatement pstmt; // 데이터베이스에서 쿼리를 실행시켜주는 객체
    ResultSet rs; // 데이터베이스 테이블의 결과를 리턴받아 자바에 저장해주는 객체
 
    // 데이터베이스에 접근할 수 있도록 도와주는 메서드
    public void getCon() {
 
        try {
            // 1. 해당 데이터베이스를 사용한다고 선언(클래스 등록 = 오라클용을 사용)
            Class.forName("oracle.jdbc.driver.OracleDriver");
            // 2. 해당 데이터베이스에 접속
            con = DriverManager.getConnection(url, id, pass);
 
        } catch (Exception e) {
        }
 
    }
 
    // 데이터베이스에 한 사람의 회원 정보를 저장해주는 메서드
    public void insertMember(MemberBean mbean) {
        try {
            getCon();
            String sql = "insert into member values(?,?,?,?,?,?,?,?)";
            // 쿼리를 사용하도록 설정
            PreparedStatement pstmt = con.prepareStatement(sql);
            // ?에 맞게 데이터를 맵핑
            pstmt.setString(1, mbean.getId()); // 첫번째 물음표자리라는 뜻, 값
            pstmt.setString(2, mbean.getPassword());
            pstmt.setString(3, mbean.getEmail());
            pstmt.setString(4, mbean.getTel());
            pstmt.setString(5, mbean.getHobby());
            pstmt.setString(6, mbean.getJob());
            pstmt.setString(7, mbean.getAge());
            pstmt.setString(8, mbean.getInfo());
            // 4. 오라클에서 쿼리를 실행
            pstmt.executeUpdate(); // insert, update, delete시 사용하는 메서드
            // 5. 자원 반납
            con.close();
 
        } catch (Exception e) {
 
            e.printStackTrace();
        }
 
    }
 
    public Vector<MemberBean> allSelectMember() {
        // 가변 길이로 데이터를 저장
        Vector<MemberBean> v = new Vector<MemberBean>();
 
        // 스래드, 네트워크, 데이터베이스는 무조건 try-catch 예외처리 필요
        try {
            // 커넥션 연결
            getCon();
            // 쿼리 준비
            String sql = "select * from member";
            // 쿼리 실행 객체 준비
            pstmt = con.prepareStatement(sql); // ?없다
            // 결과를 리턴해서 쿼리를 실행 시킼 결과를 리턴해서 받아줌
            // (오라클테이블의 검색 결과를 자바 객체에 저장)
            rs = pstmt.executeQuery();
            // 반복문을 사용해서 rs에 저장된 데이터를 추출한다
            while (rs.next()) { // 저장된 데이터만큼까지 반복문을 돌린다.
                // 세트로 불러오기 위해 MemberBean 객체로 받아온다.
                MemberBean bean = new MemberBean();
                bean.setId(rs.getString(1));// 안드로이드에선 인덱스 0부터 시작
                bean.setPassword(rs.getString(2));
                bean.setEmail(rs.getString(3));
                bean.setTel(rs.getString(4));
                bean.setHobby(rs.getString(5));
                bean.setJob(rs.getString(6));
                bean.setAge(rs.getString(7));
                bean.setInfo(rs.getString(8)); // 인덱스 바꾸는것 잊지말기
                // 패키징 완료
                // (resultset 객체로 데이터를 받아와서 멤버빈으로 패키징)
                // 패키징된 MmeberBean 클래스를 벡터에 저장
                v.add(bean); // 인덱스 0부터 저장
            }
            con.close();
 
        } catch (Exception e) {
        }
 
        return v;
    }
 
    public MemberBean oneSelectMember(String id) {
 
        MemberBean bean = new MemberBean();
        try {
            // 커넥션 연결
            getCon();
            // 쿼리 준비
            // 쿼리문에서 원하는 데이터부분을 ?로 처리
            String sql = "select * from member where id=?";
            // 쿼리 실행 객체 준비
            pstmt = con.prepareStatement(sql);
            // ?에 값을 맵핑
            pstmt.setString(1, id);
            // 쿼리 실행
            rs = pstmt.executeQuery();
 
            if (rs.next()) {// 레코드가 있다면
 
                bean.setId(rs.getString(1));// 안드로이드에선 인덱스 0부터 시작
                bean.setPassword(rs.getString(2));
                bean.setEmail(rs.getString(3));
                bean.setTel(rs.getString(4));
                bean.setHobby(rs.getString(5));
                bean.setJob(rs.getString(6));
                bean.setAge(rs.getString(7));
                bean.setInfo(rs.getString(8)); // 인덱스 바꾸는것 잊지말기
 
            }
            con.close();
        } catch (Exception e) {
 
        }
 
        return bean;
    }
 
}
cs


MemberList.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
<%@page import="model.*"%>
<%@page import="java.util.Vector"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <!--db에서 가져온 회원정보를 출력해주는 리스트페이지 -->
    <%
        //*DAO (Data Access Object)
        //DAO 객체에서 수행한 것을 불러와야하므로 DAO객체부터 생성
        MemberDAO mdao = new MemberDAO();
        //vector를 반환하므로 vector 변수로 받아줌
        Vector<MemberBean> vec = mdao.allSelectMember();
    %>
 
    <center>
        <table width="600" border="1">
            <tr height="50">
                <td align="center" width="150">아이디</td>
                <td align="center" width="250">이메일</td>
                <td align="center" width="200">전화번호</td>
                <td align="center" width="200">취미</td>
            </tr>
            <%
                for (int i = 0; i < vec.size(); i++) {
                    MemberBean bean = vec.get(i);
            %>
            <tr height="50">
                <td align="center" width="150">
                <a href="MemberInfo.jsp?id=<%=bean.getId()%>"
                <%=bean.getId()%></a></td>
                <td align="center" width="250"><%=bean.getEmail()%></td>
                <td align="center" width="200"><%=bean.getTel()%></td>
                <td align="center" width="200"><%=bean.getHobby()%></td>
            </tr>
 
            <%
                }
            %>
 
        </table>
</body>
</html>
cs



MemberInfo.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
<%@page import="model.*"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <!-- 1. db에서 한 회원의 정보를 가져옴  2.table태그를 이용하여 회원의 정보 출력-->
    <!-- MemberList에서 넘긴 한 회원의 id를 받아와야한다. -->
    <%
        //도메인으로 넘겨받은 id는 request 객체로 받아와야한다.
        String id = request.getParameter("id");
 
        MemberDAO mdao = new MemberDAO();
 
        MemberBean mbean = mdao.oneSelectMember(id);
    %>
 
    <center>
        <h2>회원 정보 보기</h2>
        <table width="400" border="1">
            <tr height="50">
                <td align="center" width="150">아이디</td>
                <td align="center" width="150"><%=mbean.getId()%></td>
            </tr>
            <tr height="50">
                <td align="center" width="150">이메일</td>
                <td align="center" width="150"><%=mbean.getEmail()%></td>
            </tr>
            <tr height="50">
                <td align="center" width="150">전화</td>
                <td align="center" width="150"><%=mbean.getTel()%></td>
            </tr>
            <tr height="50">
                <td align="center" width="150">취미</td>
                <td align="center" width="150"><%=mbean.getHobby()%></td>
            </tr>
            <tr height="50">
                <td align="center" width="150">직업</td>
                <td align="center" width="150"><%=mbean.getJob()%></td>
            </tr>
            <tr height="50">
                <td align="center" width="150">나이</td>
                <td align="center" width="150"><%=mbean.getAge()%></td>
            </tr>
            <tr height="50">
                <td align="center" width="150">정보</td>
                <td align="center" width="150"><%=mbean.getInfo()%></td>
            </tr>
 
        </table>
 
    </center>
 
 
 
 
</body>
</html>
cs