반응형

 

이번에는 JSP파일에 DB를 연결하는 걸 해보도록 하겠습니다.

 

1. DB는 MySQL 쓸겁니다.

2. JDBC라는 DB랑 JSP랑 연결해주는 게 필요합니다.

 

https://dev.mysql.com/downloads/

 

MySQL :: MySQL Community Downloads

The world's most popular open source database

dev.mysql.com

다운 받아서 압축을 풀면 mysql-connector-java-버전명.jar이라는게 있는데 이걸 WEB-INF - lib넣어주세요

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

    
<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>
<header>
	<%@ include file="topMenu.jsp" %>
</header>
<contents>
	<%@ include file="insertForm.jsp" %>
</contents>

</body>
</html>

join.jsp 입니다.

 

<%@ 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>
<h1> <a href="join.jsp">[ 회원 가입 ]</a> <a href="memberList.jsp">[회원 목록]</a> </h1>
</body>
</html>

topMenu.jsp 입니다.

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>
<form action="useBeanInsert.jsp" method="post">
	<table border="1">
		<tr>
			<td>아이디</td>
			<td><input type="text" name="memberID" size="10"></td>
			<td>암호</td>
			<td><input type="text" name="password" size="10"></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type="text" name="name" size="10"></td>
			<td>이메일</td>
			<td><input type="text" name="email" size="10"></td>
		</tr>
		<tr>
			<td colspan="4"><input type="submit" value="삽입"></td>
		</tr>
	</table>
</form>
</body>
</html>

insertForm.jsp 입니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import = "com.member.*"%>

<jsp:useBean class = "com.member.RegisterBean" id= "regBean" scope ="session"/>
<jsp:setProperty property ="*" name = "regBean"/>
<jsp:useBean class = "com.member.RegisterMgr" id ="regMgr" scope = "session"/>

<% regMgr.insertMember(regBean);%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
</body>
</html>

useBeanInsert.jsp 입니다.

 

2개의 자바빈을 사용할 건데 한 개는 Setter Getter로 이루어져있는 일반 POJO클래스입니다.

한 개는 DB와 연결해 상황에 맞는 쿼리문을 작동시킬 수 있게 만든 클래스입니다. 

여기에선 회원가입인 거이고 그에 대한 정보가 INSERT 쿼리문을 이용해 DB에 저장하는 방식입니다.

 

package com.member;

public class RegisterBean {

		private String memberID;
		private String password;
		private String name;
		private String email;
		
		public String getMemberID() {
			return memberID;
		}
		public void setMemberID(String memberID) {
			this.memberID = memberID;
		}
		
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		

}
package com.member;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Vector;


 
 public class RegisterMgr {
    
 	private final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
 	private final String JDBC_URL = "jdbc:mysql://:3307/jsp?characterEncoding=utf-8";
 	// 타임존 에러시
 	// jdbc:mysql://localhost:3306/DB이름?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
 	// jdbc:mysql://ip:port/testdb?characterEncoding=UTF-8&serverTimezone=UTC
 	private final String USER = "root";
 	private final String PASS = "1234";
 
 	public RegisterMgr() {
 	 try{
 	   Class.forName(JDBC_DRIVER);
 	   }catch(Exception e){
 	      System.out.println("Error : JDBC 드라이버 로딩 실패");
 	   }
     }//MemberMgr()
 
    public Vector getMemberList() {
	   Connection conn = null;
	   Statement stmt = null;
       ResultSet rs = null;
       Vector vecList = new Vector();
       try {
          conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
          String strQuery = "select * from membertbl";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(strQuery);
		  while (rs.next()) {
             RegisterBean regBean = new RegisterBean();
		 	 regBean.setMemberID (rs.getString("memberid"));
			 regBean.setPassword (rs.getString("password"));
 			 regBean.setName (rs.getString("name"));
 			 regBean.setEmail (rs.getString("email"));
             vecList.add(regBean);
          }
       } catch (Exception ex) {
          System.out.println("Exception" + ex);
       } finally {
          if(rs!=null)   try{rs.close();}  catch(SQLException e){}
		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
	      if(conn!=null) try{conn.close();}catch(SQLException e){}
       }
       return vecList;
    }
    public void insertMember(RegisterBean mem) {

 	   Connection conn = null;
 	   Statement stmt = null;
       ResultSet rs = null;
        try {
           conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
           stmt =  conn.createStatement();
           stmt.executeUpdate("insert into membertbl values ("+ mem.getMemberID() +", "+ mem.getPassword() + ", "+ 
                   mem.getName() + "," + mem.getEmail() + ")" );

        } catch (Exception ex) {
           System.out.println("Exception" + ex);
        } finally {
           if(rs!=null)   try{rs.close();}  catch(SQLException e){}
 		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
 	      if(conn!=null) try{conn.close();}catch(SQLException e){}
        }
        return ;
     }
 }
private final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private final String JDBC_URL = "jdbc:mysql://127.0.0.1:3307/jsp?characterEncoding=utf-8";

먼저 com.mysql.jdbc.Driver 저장해주시고

jdbc:mysql://아이피:포트번호/DB명?characterEncoding=utf-8 이렇게 작성하시면 됩니다.

 

저기에선 localhost:3306이나 127.0.0.1:3307 인 것이죠

 	private final String USER = "root";
 	private final String PASS = "1234";

아이디를 USER에 넣고 비밀번호를 PASS에 넣습니다.

 

Class.forName(JDBC_DRIVER); 는 jar파일을 이용하는 과정입니다.

 

지금은 삽입과정이니까 삽입부분만 보도록 하겠습니다.

 

public void insertMember(RegisterBean mem) {

 	   Connection conn = null;
 	   Statement stmt = null;
       ResultSet rs = null;
        try {
           conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
           stmt =  conn.createStatement();
           stmt.executeUpdate("insert into membertbl values ("+ mem.getMemberID() +", "+ mem.getPassword() + ", "+ 
                   mem.getName() + "," + mem.getEmail() + ")" );

        } catch (Exception ex) {
           System.out.println("Exception" + ex);
        } finally {
           if(rs!=null)   try{rs.close();}  catch(SQLException e){}
 		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
 	      if(conn!=null) try{conn.close();}catch(SQLException e){}
        }
        return ;
     }

DriverManager.getConnection(내가 연결할 서버, 아이디, 비밀번호)로 내가 만든 서버와 연결합니다.

DriverManager.getConnection(JDBC_URL,USER,PASS);

 

DB연결객체.createStatement();

conn.createStatement();

 

쿼리문을 작성할 장소를 만들어 줍니다.

 

stmt.executeUpdate("insert into membertbl values ("+ mem.getMemberID() +", "+ mem.getPassword() + ", "+ 
                   mem.getName() + "," + mem.getEmail() + ")" );

 

쿼리문 작성장소.executeUpdate("쿼리문") 이런식으로 작성하면 됩니다.

getMemberID(), getMemberPassword(), getMemberName(), getMemberEmail()을 이용해

회원가입에 적은 값을 불러와서 저장하면 됩니다. 쿼리문은 " 내용 " 으로 작성되어야 하니까 

더블쿼테이션을 많이 씁니다. mem.getMeberID()의 경우는 자바코드이기 때문에 더블 쿼테이션을 뺀 것이고요

 

이제 회원목록을 누르면 DB에 저장된 걸 SELECT문으로 불러오도록 하겠습니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>
<header>
	<%@ include file="topMenu.jsp" %>   
</header>
<contents>
	<%@ include file="viewMemberList.jsp"  %>
</contents>

</body>
</html>

memberList.jsp 입니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import= "java.sql.* , java.util.*, com.member.*" %>
<jsp:useBean class="com.member.RegisterMgr" id="regMgr" scope="session" />

MEMBMER 테이블의 내용
<table width="100%" border="1">
<tr>
	<td>아이디</td><td>비번</td><td>이름</td><td>이메일</td>
</tr>
<%
        Vector vResult= regMgr.getMemberList();
		
		for(int i=0; i<vResult.size(); i++){
		RegisterBean rs = (RegisterBean)vResult.get(i);
		%>
		<tr> 
		<td align="center"><%= rs.getMemberID() %></td>
		<td align="center"><%= rs.getPassword() %></td>
		<td align="center"><%= rs.getName() %></td>
		<td align="center"><%= rs.getEmail()%></td>
		
		</tr>
		<%}%>


</table>

viewMemberList.jsp 입니다.

 

public Vector getMemberList() {
	   Connection conn = null;
	   Statement stmt = null;
       ResultSet rs = null;
       Vector vecList = new Vector();
       try {
          conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
          String strQuery = "select * from membertbl";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(strQuery);
		  while (rs.next()) {
             RegisterBean regBean = new RegisterBean();
		 	 regBean.setMemberID (rs.getString("memberid"));
			 regBean.setPassword (rs.getString("password"));
 			 regBean.setName (rs.getString("name"));
 			 regBean.setEmail (rs.getString("email"));
             vecList.add(regBean);
          }
       } catch (Exception ex) {
          System.out.println("Exception" + ex);
       } finally {
          if(rs!=null)   try{rs.close();}  catch(SQLException e){}
		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
	      if(conn!=null) try{conn.close();}catch(SQLException e){}
       }
       return vecList;

똑같이 getConnection을 이용해 서버와 쓸 DB를 연결합니다.

createStatement쿼리문을 쓸 공간을 만들어주세요

executeQuery(쿼리문)SELECT문을 안에 작성합니다.

 

executeQuery문SELECT문을 쓸 경우에만 쓰고 나머지는 executeUpdate를 씁니다.

 

그 결과를 ResultSet이라는 걸로 주게 되는게 테이블에 대한 정보가 들어있는 자료형입니다.

그리고 getString을 이용해 해당 필드명에 있는 값을 가져올 수 있습니다.

그걸 지금 Vector에다가 regBean객체를 넣는 것입니다. 왜냐하면 값이 여러개 일테니깐요

 

Vector vResult= regMgr.getMemberList();
		
		for(int i=0; i<vResult.size(); i++){
		RegisterBean rs = (RegisterBean)vResult.get(i);
		%>
		<tr> 
		<td align="center"><%= rs.getMemberID() %></td>
		<td align="center"><%= rs.getPassword() %></td>
		<td align="center"><%= rs.getName() %></td>
		<td align="center"><%= rs.getEmail()%></td>
		
		</tr>
<%}%>

Vector에 받은 값은 인덱스 하나에 RegisterBean형식이기 때문에 하나씩 받아서 각각 출력시키는 형태입니다.

 

반응형