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=" 가입하기 ">
<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=" 탈퇴하기 ">
</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 |