JSP 쇼핑몰 만들기

28. JSP와 데이터베이스 연동 6

가변길이로 저장해야한다.
멤버 하나를 MemberBean에 저장하고 이 레코드들을 또 벡터에 저장을 한다.
반복문을 사용해서 rs에 저장한 데이터를 추출해야한다.
데이터가 여러개가 있으니 계속 새로운 객체를 만들어서 담아줘야한다.

public Vector<MemberBean> allSelcetMember() {
    // 가변길이로 저장
    Vector<MemberBean> v = new Vector<>();

    // 무조건 데이터 베이스는 예외처리 해줘야한다.

    try {
        // 커넥션 연결
        getCon();

        // 쿼리 준비
        String sql = "SELECT * FROM MEMBER";
        // 쿼리실행
        pstmt = con.prepareStatement(sql);
        // 쿼리 실행 시킨 결과를 리턴해서 받아줌(테이블에 검색된 것을 자바 객체에 저장)
        rs = pstmt.executeQuery();
        // 반복문을 사용해서 rs에 저장한 데이터를 추출해야한다.
        while (rs.next()) {
            MemberBean mBean = new MemberBean(); // 컬럼으로 나뉘어진 데이터를 빈 클래스에 저장
            mBean.setId(rs.getString(1));
            mBean.setPass1(rs.getString(2));
            mBean.setEmail(rs.getString(3));
            mBean.setTel(rs.getString(4));
            mBean.setHobby(rs.getString(5));
            mBean.setJob(rs.getString(6));
            mBean.setAge(rs.getString(7));
            mBean.setInfo(rs.getString(8));
            // 패키징된 MemberBean을 벡터에 저장
            v.add(mBean); // 0번지부터 데이터를 순서대로 저장
        }
        // 자원반납
        con.close();
    } catch (Exception e) {
        e.getStackTrace();
    }
    return v;
}

html에 값을 넣어서 꽃으면 된다.

<div align="center">
    <h2>모든회원보기</h2>
    <table border="1">
        <tr height="50">
            <td align="center" width="150px"> 아이디 </td>
            <td align="center" width="250px"> 이메일 </td>
            <td align="center" width="200px"> 전화번호</td>
            <td align="center" width="200px"> 취미 </td>
        </tr>
        <%
            for(int i = 0; i < vec.size(); i++){
                MemberBean bean = vec.get(i);

        %>
        <tr height="50">
            <td align="center" width="150px"> <%= bean.getId() %> </td>
            <td align="center" width="250px"> <%= bean.getEmail() %> </td>
            <td align="center" width="200px"> <%= bean.getTel() %></td>
            <td align="center" width="200px"> <%= bean.getHobby() %> </td>
        </tr>
        <%
            }
        %>
    </table>
</div>

29. JSP와 데이터베이스 연동 7

MemberInfo 작성하기
id를클릭하면 상세보기를 해보자. a태그의 링크를 이용하면된다.
jsp주소에 id값을 심어서 보내주면된다.

MemberDAO에서는 한사람의 데이터값을 받아와야하니 MemberInfo에서 한사람의 id값을 넣어준다.
String id = request.getParameter("id"); //Memverlist에서 받은값

//한사람 정보 뱉어내기
    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));
                bean.setPass1(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));
            }

            rs.close();
            con.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
        return bean;
    }

<div align="center">
    <h2>회원 정보 보기</h2>
    <table border="1">
        <tr height="50">
            <td align="center" width="150px"> 아이디 </td>
            <td width="250px"> <%= mBean.getId() %> </td>
        </tr>

        <tr height="50">
            <td align="center" width="150px"> 이메일 </td>
            <td width="250px"> <%= mBean.getEmail()%> </td>

        <tr height="50">
            <td align="center" width="150px"> 전화 </td>
            <td width="250px"> <%= mBean.getTel() %> </td>
        </tr>    

        <tr height="50">
            <td align="center" width="150px"> 취미 </td>
            <td width="250px"> <%= mBean.getHobby() %> </td>
        </tr>    

        <tr height="50">
            <td align="center" width="150px"> 직업 </td>
            <td width="250px"> <%= mBean.getJob() %> </td>
        </tr>    

        <tr height="50">
            <td align="center" width="150px"> 나이 </td>
            <td width="250px"> <%= mBean.getAge() %></td>
        </tr>    

        <tr height="50">
            <td align="center" width="150px">정보</td>
            <td width="250px"><%= mBean.getInfo()%></td>
        </tr>
    </table>
</div>

30. JSP와 데이터베이스 연동 8

정보에서 수정하기와 삭제하기
밑에 칸하나를 더만들어서 수정버튼 삭제버튼 목록보기버튼 회원가입버튼

수정버튼 하면 화면 그대로 하면서 수정
아이디 이메일 전화 기준 + 맨밑에 비밀번호입력
비밀번호가 맞을때만 수정하게 하기

버튼 4개 만들 것이다. input submit은 form안에서만 사용할 수 있다.
<button onclick="location.href='MemberList.jsp'" >회원전체보기</button>
js를 사용해서 버튼을 누르면 페이지로 갈 수 있다.

form은 값을 가지고 데이터를 가야하는 부분까지만 감싼다.
버튼이 같이 감싸지면 MemberUpdateProc로 같이가지려한다.
버튼바깥과 테이블 안쪽에 넣어주는 것으로 하자.

<div align="center">
    <h2>회원 정보 수정 하기</h2>
    <table border="1">
    <form action="MemberUpdateProc.jsp" method="post" >
        <tr height="50">
            <td align="center" width="150px"> 아이디 </td>
            <td width="250px"> <%= mBean.getId() %> </td>
        </tr>

        <tr height="50">
            <td align="center" width="150px"> 이메일 </td>
            <td width="250px"> <input type="email" name ="email" value="<%= mBean.getEmail()%>"/></td>

        <tr height="50">
            <td align="center" width="150px"> 전화 </td>
            <td width="250px"> <input type="tel" name ="tel" value="<%= mBean.getTel()%>"/></td>
        </tr>    

        <tr height="50">
            <td align="center" width="150px"> 패스워드 </td>
            <td width="250px"> <input type="password" name ="pass1"/> </td>
        </tr>    

        <tr height="50">
            <td align="center" colspan="2">
                <input type="submit" value = "회원수정하기"/> 
            </form>
                <button onclick="location.href='MemberList.jsp'">회원전체보기</button>
            </td>
        </tr>
    </table>
</div>

31. JSP와 데이터베이스 연동 9

MemberUpdate를 처리하기 위해 MemberUpdateProc.jsp를 만들자.
그런데 문제가 있다.
폼데이터 처리라는것은 폼안에 잇는 값을 보내느 것이다.
id는 박스가없어서 보낼수가 없는데 input type hidden하면 데이터가 보내진다.
<input type="hidden" name="id" value="<%=mBean.getId() %>"/>

4개뿐이안되는데 멤버빈받으면 어카나 그냥 받아오고 나머지는 null값이 될뿐이다.

<jsp:useBean id="mBean" class="model.MemberBean">
    <jsp:setProperty name="mBean" property="*" />
</jsp:useBean>

원래는 한회원 가져오는 것을 사용해도되지만 비밀번호만 쓰는 메소드를 따로 만들어보자.
비밀번호가 일치하는지 비교해주자.

// 한회원의 비밀번호
public String getPass(String id) {
    getCon();
    String pass = "";
    try {
        String sql = "SELECT PASS1 FROM MEMBER WHERE id = ?";
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, id);
        rs = pstmt.executeQuery();
        if (rs.next()) {
            pass = rs.getString("PASS1");
        }
        rs.close();
        con.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return pass;
}

<%
    String id = request.getParameter("id");
    String email = request.getParameter("email");
    String tel = request.getParameter("tel");

    MemberDAO mdao = new MemberDAO();
    //스트링타입으로 저장되어 있는 db의 패스워드를 가져오기
    String dbPass = mdao.getPass(id);

    if (mBean.getPass1().equals(dbPass)) { //기존패스와 db패스가 같다면 멤버테이블 수정
    } else {
    %>
    <script type="text/javascript"> 
        alert("패스워드가 맞지 않습니다 다시 확인해주세요");
        history.go(-1);
    </script>
    <%
    }
    %>

32. JSP와 데이터베이스 연동 10

32.1 업데이트

수정하는 처리를 해보자 비밀번호가 맞으면 업데이트하면된다.
폼데이터에서 가져온 정보로 멤버빈 객체를 만들어 놓았으니 그것을 가져다 사용하면된다.
업데이트하고 멤버리스트를 리다이렉트 해주면된다.

public void updateMember(MemberBean mBean) {
    getCon();

    String sql = "UPDATE MEMBER SET EMAIL=?, TEL=? WHERE ID = ?";
    try {
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, mBean.getEmail());
        pstmt.setString(2, mBean.getTel());
        pstmt.setString(3, mBean.getId());
        pstmt.executeUpdate();

        con.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

if (mBean.getPass1().equals(dbPass)) { //기존패스와 db패스가 같다면 멤버테이블 수정
    //MemberDAO의 회원수정 메소드 호출
    mdao.updateMember(mBean);
    response.sendRedirect("MemberList.jsp");
} 

32.2 삭제

삭제는 아이디와 비밀번호만 받으면된다.

//한회원을 삭제하는 메소드
public void deleteMember(String id) {
    try {
        getCon();
        String sql = "DELETE FROM MEMBER WHERE id = ? ";
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, id);
        pstmt.executeUpdate();

        con.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

<%
MemberDAO mdao = new MemberDAO();
String dbPass = mdao.getPass(mBean.getId());

if (mBean.getPass1().equals(dbPass)) { 
    //MemberDAO의 회원삭제 메소드 호출
    mdao.deleteMember(mBean.getId());
    response.sendRedirect("MemberList.jsp");
} else {
%>

2023.03.24

코드 자체는 어렵지 않은데 설계하는데서 항상 어려움을 겪는 것 같다.

'기초단계 > JSP&Servlet' 카테고리의 다른 글

2023.03.26 JSP  (0) 2023.03.26
2023.03.25 JSP  (0) 2023.03.26
2023.03.22 JSP  (0) 2023.03.22
2023.03.21 JSP  (0) 2023.03.21
2023.03.20 JSP  (0) 2023.03.20

+ Recent posts