본문 바로가기
뒤끝 (Back-End)

[JSP] JDBC

728x90

JDBC : 다양한 DBMS 제조사들은 본사에서 개발한 DBMS를 Java 프로그램과 연동할 수 있도록 기술 지원, 데이터베이스를 조작하기 위한 API 로 메소드 호출용 SQL 인터페이스를 지원

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> JDBC 커넥션 테스트 </title>
</head>
<body>
	<%
		// 1. JDBC 관련 변수 및 객체 선언
		String driverName="com.mysql.jdbc.Driver";	//JDBC 드라이버 클래스 변수
		String url = "jdbc:mysql://localhost:3306/odbo";	//MySQL 포트와 DB 변수
		String username = "root";	// 사용자 변수
		String password = "123456";	// 사용자의 비밀번호 변수
		Connection conn = null;	// Connection 객체 선언
		try{
			// 2. 드라이버 로딩 : JDBC 드라이버의 인스턴스 생성
			Class.forName(driverName);
			// 3. 연동 : JDBC 드라이버 인스턴스를 통해 DBMS 연결 생성
			conn = DriverManager.getConnection(url, username, password);
			// 4. 사용
			out.println(">> 연결 성공 : " + conn);
		} catch(ClassNotFoundException e){
			out.println(">> 연결 실패 : 드라이버 복사 필요!");			
		} catch(SQLException e){
			out.println(">> 연결 실패 : SQL 명령문 확인 필요!");
		} finally{
			// 5. 닫기 : Connection 객체 닫기
			try{
				if(conn != null)
					conn.close();
			} catch(SQLException e){
				;
			}
		}
	%>
</body>
</html>

 


회원 가입 프로젝트

데이터베이스 준비

IF NOT EXISTS 테이블 : 테이블 (members)이 존재하지 않는 경우 CREATE TABLE 명령을 실행함

CREATE TABLE
IF NOT EXISTS members(
id VARCHAR(20) PRIMARY KEY,
passwd VARCHAR(20),
email VARCHAR(50),
signuptime
TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


회원 가입 페이지

// signup.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 회원 가입 </title>
</head>
<body>
	Home > Signup the Membership
	<hr>
	<form action="signup_process_2.jsp" name="user_info" method="post">
		<fieldset style="width:200px">
			<legend> 회원 가입 </legend><p>
	
			아이디 : <br>
			<input type="text" name="userID"><br><br>
		
			비밀번호 : <br> 
			<input type="password" name="userPW"><br><br>
			
			이메일 : <br>
			<input type="email" name="userMAIL"><br><br>		
			<hr>
			
		<div align="center">
			<input type="submit" value=" 가입하기 "> &nbsp;&nbsp;
			<input type="reset" value=" 다시작성 ">
		</div><br>
		</fieldset>
	</form>
</body>
</html>

 

// signup_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<% 
	String u_id = request.getParameter("userID");
	String u_pw = request.getParameter("userPW");
	String u_mail = request.getParameter("userMAIL");
	
	String sql = "INSERT INTO members(id, passwd, email) VALUES";
	sql += "('" + u_id + "','" + u_pw + "','" + u_mail + "')";
	
	/* String sql = "INSERT INTO members(id, passwd, email) VALUES(?, ?, ?)"; */
	
	String driverName="com.mysql.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/odbo";
	String username = "root";
	String password = "123456";
	Connection conn = null;
	
	Class.forName(driverName);	// JDBC 드라이버의 인스턴스 생성
	conn = DriverManager.getConnection(url, username, password);	// DBMS 연동
	Statement sm = conn.createStatement();	// Statement 객체 생성
	int count = sm.executeUpdate(sql);	// sql문장 실행
    
	/*
	PreparedStatement prestm = conn.prepareStatement(sql);
	prestm.setString(1, u_id);
	prestm.setString(2, u_pw);
	prestm.setString(3, u_mail);
	int count = prestm.executeUpdate();
	*/
	
	if(count == 1){
		out.println("회원가입 성공!");
	}else{
		out.println("회원가입 실패!");
	}
	sm.close();	// Statement 객체 닫기
	conn.close();	// Connection 객체 닫기
%>

회원정보 출력 페이지

메소드 의미
next() 현재 레코드에서 다음 레코드로 커서를 이동(성공 : true / 실패 : false)
getString(String column) 레코드 내 파라미터로 주어진 column값을 String 타입으로 반환
getint(String column) 레코드 내 파라미터로 주어진 column값을 int 타입으로 반환
first() 첫번째 레코드 위치로 커서 이동
last() 마지막 레코드 위치로 커서 이동
previous() 커서의 위치를 역방향으로 이동
getRow() 커서의 인덱스 값을 조회
// membersList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<% 
	String sql = "SELECT id, email, signuptime FROM members";

	String driverName="com.mysql.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/odbo";
	String username = "root";
	String password = "123456";
	Connection conn = null;
	
	Class.forName(driverName);	// JDBC 드라이버의 인스턴스 생성
	conn = DriverManager.getConnection(url, username, password);	// DBMS 연동
	
	Statement sm = conn.createStatement();	// Statement 객체 생성
	ResultSet rs = sm.executeQuery(sql);	// sql 문장 실행
	
	String str = "";
	int count = 1;
	
	while(rs.next()){
		str += count + " : " + rs.getString("id") + " / " + rs.getString("email")
			+ " / " + rs.getString("signuptime") + "<br>";
		count++;
	}
	out.print("Home > 회원가입 명단 <hr>");
	out.print(str);
	
	rs.close();	// ResultSet 객체 닫기
	sm.close();	// Statement 객체 닫기
	conn.close();	// Connection 객체 닫기
%>

자바 빈즈로 출력

/* src/main/java/ MemberBean.java */
package ch11;

public class MemberBean {
	private String id;
	private String passwd;
	private String email;
	private String signuptime;
	
	public String getId() { return id; }
	public void setId(String id) { this.id = id;}
	
	public String getPasswd() { return passwd; }
	public void setPasswd(String passwd) {
	this.passwd = passwd;
	}
	
	public String getEmail() {
	return email;
	}
	public void setEmail(String email) {
	this.email = email;
	}
	
	public String getSignuptime() {
	return signuptime;
	}
	public void setSignuptime(String signuptime) {
	this.signuptime = signuptime;
	}
}
/* src/main/java/ MemberMgr.java */
package ch11;

import java.sql.*;
import java.util.Vector;

public class MemberMgr {
	String driverName = "com.mysql.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/odbo";
	String username = "root";
	String password = "123456";
	Connection conn = null;
	Statement sm = null;
	ResultSet rs = null;

	public MemberMgr() {
		try {
			Class.forName(driverName); // JDBC 드라이버의 인스턴스 생성
		}catch(Exception e) {
			System.out.println("Error : JDBC 드라이버 로딩 실패");
		}
	}
	

	public Vector<MemberBean> getMembersList() {
		Vector<MemberBean> vectorList = new Vector<MemberBean>();
		try {
			conn = DriverManager.getConnection(url, username, password);
			String sql = "select * from members";
			sm = conn.createStatement();
			rs = sm.executeQuery(sql);
			while(rs.next())
			{
				MemberBean bean = new MemberBean();
				bean.setId(rs.getString("id"));
				bean.setPasswd(rs.getString("passwd"));
				bean.setEmail(rs.getString("email"));
				bean.setSignuptime(rs.getString("signuptime"));
				vectorList.addElement(bean);
			}
		}catch(Exception e) {
			System.out.println("Exception" + e);	
		}finally {
			try {
				rs.close();
			} catch (SQLException e) {	}
			try {
				sm.close();
			} catch (SQLException e) {	}
			try {
				conn.close();
			} catch (SQLException e) {	}
		}
		
		return vectorList;
		
	}
	
}
// membersList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*, ch11.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보출력__자바빈즈</title>
</head>
<body>
<h3>Home > 회원가입 명단(useBean)</h3>
<hr>
<table border=1 width=500>
	<tr>
	<th>번호</th><th>아이디</th><th>비밀번호</th><th>이메일</th><th>등록일</th>
	</tr>

	<jsp:useBean id="mMgr" class="ch11.MemberMgr"/>
	<%
		Vector<MemberBean> vlist = mMgr.getMembersList();
		for ( int i = 0; i < vlist.size(); i++ ){
			MemberBean mBean = vlist.get(i);
	%>
		<tr align=center><td><%=i+1 %></td>
		<td><%=mBean.getId() %></td>
		<td><%=mBean.getPasswd() %></td>
		<td><%=mBean.getEmail() %></td>
		<td><%=mBean.getSignuptime() %></td></tr>
	<%
		}
	%>
</table>
</body>
</html>

 


회원 탈퇴 페이지

// withdraw.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 회원 탈퇴 </title>
</head>
<body>
	Home > Withdraw the Membership
	<hr>
	<form action="withdraw_process.jsp" name="user_info" method="post">
		<fieldset style="width:200px">
			<legend> 회원 탈퇴 </legend><p>
	
			아이디 : <br>
			<input type="text" name="userID"><br>
			
		<div align="center">
			<input type="submit" value=" 탈퇴하기 "> &nbsp;&nbsp;
		</div><br>
		</fieldset>
	</form>
</body>
</html>

// withdraw_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<% 
	String u_id = request.getParameter("userID");
	String sql = "DELETE FROM members WHERE id = ?";	// 폼에서 전달되는 파라미터 이용을 위한 ?
	
	String driverName="com.mysql.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/odbo";
	String username = "root";
	String password = "123456";
	Connection conn = null;
	
	Class.forName(driverName);	// JDBC 드라이버의 인스턴스 생성
	conn = DriverManager.getConnection(url, username, password);	// JDBC 연동
	
	PreparedStatement prestm = conn.prepareStatement(sql);	// PreparedStatement 객체 생성
	prestm.setString(1, u_id);	// 첫번째 ? 설정
	int count = prestm.executeUpdate(); // sql 문장 실행
	
	if(count == 1){
		out.print("회원 탈퇴 성공!");
	}else{
		out.print("회원 탈퇴 실패!");
	}
	prestm.close();
	conn.close();	
%>

 

728x90

'뒤끝 (Back-End)' 카테고리의 다른 글

[JSP] 세션  (0) 2024.12.05
[JSP] 데이터베이스  (2) 2024.12.04
[JSP] 액션 태그  (0) 2024.10.18
[JSP] request 내장 객체  (5) 2024.10.16
[JSP] 폼 태그  (3) 2024.10.14