이번에는 JSP파일에 DB를 연결하는 걸 해보도록 하겠습니다.
1. DB는 MySQL 쓸겁니다.
2. JDBC라는 DB랑 JSP랑 연결해주는 게 필요합니다.
https://dev.mysql.com/downloads/
다운 받아서 압축을 풀면 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형식이기 때문에 하나씩 받아서 각각 출력시키는 형태입니다.