사용자 관리 이어서
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
if(session.getAttribute("Member")== null){
response.sendRedirect("login.jsp");
}//loginOk에서 session.setAttribute("Mebmer", "yes");가 아닌경우 login.jsp로 보낸다.(튕기게함)
String uid = (String)session.getAttribute("uid");
String name = (String)session.getAttribute("name");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<form method="post" action ="logOut.jsp">
<tr>
<td>안녕하세요. <%= name %>(<%= uid %>)님 </td>
</tr>
<tr>
<td>
<input type="submit" value="로그아웃">
<input type="button" value="회원정보변경"
onclick="javascript:window.location='memberUpdate.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<script language="JavaScript" src="script.js" charset="utf-8"></script>
<body>
<%
String uid = (String)session.getAttribute("uid");
String name = (String)session.getAttribute("name");
%>
<table border="1" align ="center">
<form name="reg_frm" method="post" action="registerOk.jsp">
<tr height="50">
<td colspan = "2">
<h1>회원 가입 신청</h1>
'*'표시 항목은 필수 입력 항목입니다.
</td>
</tr>
<tr height="30">
<td width="80">User ID</td >
<td><%=uid %></td>
</tr>
<tr height="30">
<td width="80">암호</td>
<td><input type="password" size ="20" name="mem_pwd">*</td>
</tr>
<tr height="30">
<td width="80">암호 확인</td>
<td><input type="password" size ="20" name="pwd_check">*</td>
</tr>
<tr height="30">
<td width="80">이 름</td>
<td><%= name %></td>
</tr>
<tr height="30">
<td width="80">E-mail</td>
<td><input type="text" size ="30" name="mem_email" >*</td>
</tr>
<tr height="30">
<td width="80">주 소</td>
<td><input type="text" size ="40"name="mem_addr"></td>
</tr>
<tr>
<td colspan = "2" align="center">
<input type="button" value="수정" onclick="update_check_ok()">
<input type="reset" value="다시입력">
<input type="button" value="수정안함" onclick="javascript:window.location='login.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
function check_ok(){
//if(document.reg_frm.mem_uid.value==""){
//if(reg_frm.mem_uid.value==""){
if(reg_frm.mem_uid.value.length==0){
alert("아이디를 써주세요");
reg_frm.mem_uid.focus();
return;//아이디가 없으면 리턴
}
if(reg_frm.mem_uid.value.length < 4){
alert("아이디는 4글자이상이어야 합니다.");
reg_frm.mem_uid.focus();
return;//패스워드가 없으면 리턴
}
if(reg_frm.mem_pwd.value.length == 0){
alert("패스워드는 반드시 입력해야 합니다.");
reg_frm.mem_pwd.focus();
return;//아이디가 없으면 리턴
}
if( reg_frm.pwd_check.value != reg_frm.mem_pwd.value){
alert("패스워드가 일치하지 않습니다.");
reg_frm.pwd_check.focus();
return;//패스워드가 일치하지 않으면 리턴
}
if( reg_frm.mem_name.value.length==0){
alert("이름을 써주세요.");
reg_frm.mem_name.focus();
return;//이름가 없으면 리턴
}
if( reg_frm.mem_email.value.length==0){
alert("Email을 써주세요.");
reg_frm.mem_email.focus();
return;//이름가 없으면 리턴
}
document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="registerOk.jsp"으로 가겠다.(전송/submit)
}
function update_check_ok(){
if(upd_frm.mem_pwd.value.length == 0){
alert("패스워드는 반드시 입력해야 합니다.");
upd_frm.mem_pwd.focus();
return;//아이디가 없으면 리턴
}
if( upd_frm.pwd_check.value != upd_frm.mem_pwd.value){
alert("패스워드가 일치하지 않습니다.");
upd_frm.pwd_check.focus();
return;//패스워드가 일치하지 않으면 리턴
}
if( upd_frm.mem_email.value.length==0){
alert("Email을 써주세요.");
upd_frm.mem_email.focus();
return;//이름가 없으면 리턴
}
document.upd_frm.submit();
}
package magic.member;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDBBean {
Connection conn = null;
PreparedStatement pstmt = null;
//1. 전역 MemberDBBean 객체 레퍼런스를 리턴하는 메소드
private static MemberDBBean instance = new MemberDBBean();
//참조변수 instance를 객체로 받아서 사용
public static MemberDBBean getInstance(){
return instance;
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
public Connection getConnection( ) throws Exception{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
//경로 찾기
return ds.getConnection();
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//3. 전달인자로 받은 member를 memberT 테이블에 삽입하는 메소드
public int insertMember(MemberBean member) throws Exception{// MemberBean member(매개변수)객체
int re = -1;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
String sql = "INSERT INTO MEMBERT VALUES (?,?,?,?,sysdate,?)";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
pstmt.setString(1, member.getMem_uid());
//값을 넣기 위해(세팅하기 위해서)사용
pstmt.setString(2, member.getMem_pwd());
pstmt.setString(3, member.getMem_name());
pstmt.setString(4, member.getMem_email());
// pstmt.setTimestamp(5, member.getMem_regdate());
pstmt.setString(5, member.getMem_addr());
pstmt.executeUpdate();//쿼리 실행
//여기서 sql문은 insert문이기 때문에 executeUpdate();를 사용해야함
re=1;//쿼리가 정상적으로 실행되었을때, re =1 이 됨.
} catch(SQLException ex) {
System.out.println("추가 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
//4. 회원 가입시 아이디 중복 확인 할때 사용하는 메소드
public int confirmID(String id) throws Exception{//String id를 받아서 사용
int re = -1;//결과값 분기처리하기 위해서 변수 선언
Connection conn = null;//데이터 베이스 접속//dbcp 연결위한 참조변수 선언
PreparedStatement pstmt = null;// DB에 SQL 전달//SQL문 사용하기 위한 참조변수 선언
ResultSet rs = null;//조회시 결과값받음 //쿼리결과값 받기 위해서 참조변수 선언
String sql ="SELECT * FROM MEMBERT WHERE mem_uid = ?";//쿼리를 변수로 사용
try {//DB 처리를 위해서 예외발생을 위한 try~catch문 사용
conn = getConnection();//dbcp 연결해서 conn 참조변수로 받음
pstmt = conn.prepareStatement(sql);
//conn 객체에서 prepareStatment 메소드의 매개변수로 쿼리문 사용
pstmt.setString(1,id); //쿼리 파라미터를 index로 받아서 처리
rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음
//select 조회문은 executeQuery 메소드 처리
//결과를 확인하기 위해서 while(여러개의 결과값) 또는 if문 사용
if (rs.next()) {
re = 1; //id 조회했을 때 중복인 경우
}else {
re = -1; //id 조회했을 때 중복이 아닌 경우
}
} catch(SQLException ex) {//쿼리 조회했다가 오류 발생시
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
//5. 사용자 인증시 사용하는 메소드
public int userCheck(String id, String pwd) throws Exception{
int re = -1;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String db_mem_pwd;
String sql="SELECT MEM_PWD FROM MEMBERT WHERE mem_uid = ?";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);
rs = pstmt.executeQuery();
if (rs.next()) {//아이디가 일치하는 로우 존재
db_mem_pwd = rs.getString("mem_pwd");
if(db_mem_pwd.equals(pwd)) {//패스워드도 일치
re = 1;
}else {//패스워드가 불일치
re = 0;
}
}else {//해당 아이디가 존재하지 않음
re = -1;
}
} catch(SQLException ex) {
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
private String mem_address;
//6. 아이디가 일치하는 멤버의 정보를 얻어오는 메소드
public MemberBean getMember(String id) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT MEM_UID, MEM_PWD, MEM_NAME, MEM_EMAIL, MEM_REGDATE, MEM_ADDRESS "
+"FROM MEMBERT WHERE MEM_UID=?";
//*가 아니라 다 적으면 나중에 수정할때 편함
//재시작하지 않아도 됨.
MemberBean member=null;
try{
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
//while 또는 if
if(rs.next()) {//아이디가 일치하는 로우 존재
member=new MemberBean();
//가지고 와서 값 setting
member.setMem_uid(rs.getString("mem_uid"));
member.setMem_pwd(rs.getString("mem_pwd"));
member.setMem_name(rs.getString("mem_name"));
member.setMem_email(rs.getString("mem_email"));
member.setMem_regdate(rs.getTimestamp("mem_regdate"));
member.setMem_addr(rs.getString("mem_address"));
}
} catch(SQLException ex) {
System.out.println("조회 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
rs.close();
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return member;
}
//7. 회원 정보 테이블내의 특정 행의 값을 변경한다
public int updateMember(MemberBean member)throws Exception{
int re = -1;
Connection conn = null;
PreparedStatement pstmt = null;
String sql="UPDATE MEMBERT SET MEM_PWD=?, MEM_NAME=?, MEM_EMAIL=? , MEM_ADDRESS=? WHERE MEM_UID=?";
try{
conn=getConnection();
pstmt=conn.prepareStatement(sql);
// 하나하나 확인 해봐야함
// System.out.println("@@@### member.getMem_pwd() ===>"+member.getMem_pwd());
// System.out.println("@@@### member.getMem_name() ===>"+member.getMem_name());
// System.out.println("@@@### member.getMem_email() ===>"+member.getMem_email());
// System.out.println("@@@### member.getMem_addr() ===>"+member.getMem_addr());
// System.out.println("@@@### member.getMem_uid() ===>"+member.getMem_uid());
pstmt.setString(1, member.getMem_pwd());
pstmt.setString(2, member.getMem_name());
pstmt.setString(3, member.getMem_email());
pstmt.setString(4, member.getMem_addr());
pstmt.setString(5, member.getMem_uid());
re = pstmt.executeUpdate();//쿼리 실행
System.out.println("@@@### re ===>"+re);
System.out.println("변경 성공");
}catch (Exception ex) {
System.out.println("변경 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
}
<%@page import="magic.member.MemberBean"%>
<%@page import="magic.member.MemberDBBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<jsp:useBean id="mb" class="magic.member.MemberBean"></jsp:useBean>
<jsp:setProperty property="*" name="mb"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String uid = (String)session.getAttribute("uid");
mb.setMem_uid(uid);// id값을 따로 받아와야함.
//memberUpdate.jsp에서 id부분은 표현식으로 결과만 나오게 되어있음
//그러면 실제로 updateMember메소드 실행할 때 uid 값은 받아오지 않아서 null값이 뜬다.
//그래서 String uid = (String)session.getAttribute("uid");으로 받아온 후에
//자바빈 set으로 id값를 받아온다.
MemberDBBean manager=MemberDBBean.getInstance();
int re = manager.updateMember(mb);
//updateMember 메소드 보면 member객체를 가지고 mb가 나옴
//여기서 re값을 받는다.//억지로 re =1할 필요 없음
if(re==1){
%>
<script>
alert("입력하신대로 회원 정보가 수정되었습니다.");
document.location.href="main.jsp";
</script>
<%
}else{
%>
<script>
alert("수정이 실패되었습니다.");
history.go(-1);
</script>
<%
}
%>
</body>
</html>
action="memberUpdateOk.jsp```sql
<%@page import="magic.member.MemberDBBean"%>
<%@page import="magic.member.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
회원 정보 수정'*'표시 항목은 필수 입력 항목입니다. |
|
User ID | <%= uid %> |
암호 | * |
암호 확인 | * |
이 름 | * |
* | |
주 소 | |
<%@page import="magic.member.MemberDBBean"%>
<%@page import="magic.member.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<script language="JavaScript" src="script.js" charset="utf-8"></script>
<body>
<%
/* if(session.getAttribute("Member")== null){
response.sendRedirect("login.jsp");
}//loginOk에서 session.setAttribute("Mebmer", "yes");가 아닌경우 login.jsp로 보낸다.(튕기게함) */
String uid = (String)session.getAttribute("uid");
//String name = (String)session.getAttribute("name");
MemberDBBean manager= MemberDBBean.getInstance(); //겟인스턴스로 메소드 호출해서 결과 받음
MemberBean mb = manager.getMember(uid);
//겟인스턴스로 메소드 호출해서 리턴된 멤버 결과 받을때 mb.getMem_~~식으로 받음
%>
<table border="1" align ="center">
<form name="upd_frm" method="post" action="memberUpdateOk.jsp">
<tr height="50">
<td colspan = "2">
<h1>회원 정보 수정</h1>
'*'표시 항목은 필수 입력 항목입니다.
</td>
</tr>
<tr height="30">
<td width="80">User ID</td >
<td><%= uid %></td>
</tr>
<tr height="30">
<td width="80">암호</td>
<td><input type="password" size ="20" name="mem_pwd">*</td>
</tr>
<tr height="30">
<td width="80">암호 확인</td>
<td><input type="password" size ="20" name="pwd_check">*</td>
</tr>
<tr height="30">
<td width="80">이 름</td>
<td><input type="text" size ="20" name="mem_name" value="<%= mb.getMem_name() %>">*</td>
</tr>
<tr height="30">
<td width="80">E-mail</td>
<td><input type="text" size ="30" name="mem_email" value="<%= mb.getMem_email() %>" >*</td>
</tr>
<tr height="30">
<td width="80">주 소</td>
<td><input type="text" size ="40"name="mem_addr" value="<%= mb.getMem_addr() %>"></td>
</tr>
<tr>
<td colspan = "2" align="center">
<input type="submit" value="수정" onclick="update_check_ok()">
<input type="reset" value="다시입력">
<input type="button" value="수정안함" onclick="javascript:window.location='login.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>글올리기</h1>
<form name="form" method="post" action="write_ok.jsp">
<table align ="center">
<tr height ="30">
<td width="80">작성자 </td>
<td width="140">
<input type="text" name="b_name" size="10" maxlength="20">
</td>
<td ="80">이메일</td>
<td width="240">
<input type="text" name="b_email"size="24" maxlength="50">
</td>
</tr>
<tr height ="30">
<td width ="80">글제목 </td>
<td colspan="3" width="460">
<input type="text"name="b_title" size="55" maxlength="80">
</td>
</tr>
<tr>
<td colspan="4" align ="center">
<textarea cols="65" rows="10" name="b_content"></textarea>
</td>
</tr>
<tr height ="50" align ="center">
<td colspan = "4" >
<input type="submit" value="글쓰기">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
처음에 name이 없으면 위의 사진처럼 데이터값을 받지 못한다.
그래서 write.jsp의 input
부분에 name="b_content" name="b_email" name="b_title" name="b_name"를 추가하여 입력
package magic.board;
public class BoardBean {
private String b_name;
private String b_email;
private String b_title;
private String b_content;
public String getB_name() {
return b_name;
}
public void setB_name(String b_name) {
this.b_name = b_name;
}
public String getB_email() {
return b_email;
}
public void setB_email(String b_email) {
this.b_email = b_email;
}
public String getB_title() {
return b_title;
}
public void setB_title(String b_title) {
this.b_title = b_title;
}
public String getB_content() {
return b_content;
}
public void setB_content(String b_content) {
this.b_content = b_content;
}
}
package magic.board;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDBBean {
//1. 전역 BoardDBBean 객체 레퍼런스를 리턴하는 메소드
private static BoardDBBean instance = new BoardDBBean();
public static BoardDBBean getInstance(){
return instance;
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
public Connection getConnection( ) throws Exception{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
//경로 찾기
return ds.getConnection();
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//3. 전달인자로 받은 BoardBean board를 BOARDT 테이블에 삽입하는 메소드
public int insertBoard(BoardBean board) throws Exception{
int re = -1;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
String sql = "INSERT INTO BOARDT VALUES (?,?,?,?)";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
System.out.println("@@@@#### board.getB_name()=====>"+board.getB_email());
System.out.println("@@@@#### board.getB_name()=====>"+board.getB_title());
System.out.println("@@@@#### board.getB_name()=====>"+board.getB_content());
pstmt.setString(1, board.getB_name());
pstmt.setString(2, board.getB_email());
pstmt.setString(3, board.getB_title());
pstmt.setString(4, board.getB_content());
pstmt.executeUpdate();
re =1;
} catch(SQLException ex) {
System.out.println("추가 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
}
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<jsp:useBean id="board" class="magic.board.BoardBean"/>
<jsp:setProperty property="*" name="board"/>
<%
BoardDBBean db = BoardDBBean.getInstance();
//instance를 db객체로 받음.
db.insertBoard(board);
%>
Write.jsp
글쓰기 버튼의 type 을 button 으로 변경하고 onclick 속성에 check_ok() 함수 호출
head 태그 안에 자바스크립트 board.js 추가
BoardBean.java
글 번호 프로퍼티 및 getter, setter 추가
BoardDBBean.java
글번호가 가장 큰 값을 조회해서 1증가 한 값을 insert 구분에 추가
function check_ok(){
if(reg_frm.b_name.value.length==0){
alert("이름을 써주세요.");
reg_frm.b_name.focus();
return;//아이디가 없으면 리턴
}
if(reg_frm.b_title.value.length==0){
alert("제목을 써주세요.");
reg_frm.b_title.focus();
return;//아이디가 없으면 리턴
}
if(reg_frm.b_content.value.length==0){
alert("내용을 써주세요.");
reg_frm.b_content.focus();
return;//아이디가 없으면 리턴
}
document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="write_ok.jsp"으로 가겠다.(전송/submit)
}
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<script language="JavaScript" src="board.js" charset="utf-8"></script>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>글올리기</h1>
<form name="reg_frm" method="post" action="write_ok.jsp">
<table align ="center">
<tr height ="30">
<td width="80">작성자 </td>
<td width="140">
<input type="text" name="b_name" size="10" maxlength="20">
</td>
<td ="80">이메일</td>
<td width="240">
<input type="text" name="b_email"size="24" maxlength="50">
</td>
</tr>
<tr height ="30">
<td width ="80">글제목 </td>
<td colspan="3" width="460">
<input type="text"name="b_title" size="55" maxlength="80">
</td>
</tr>
<tr>
<td colspan="4" align ="center">
<textarea cols="65" rows="10" name="b_content"></textarea>
</td>
</tr>
<tr height ="50" align ="center">
<td colspan = "4" >
<input type="button" value="글쓰기" onclick="check_ok()">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
package magic.board;
public class BoardBean {
private int b_id;
private String b_name;
private String b_email;
private String b_title;
private String b_content;
public int getB_id() {
return b_id;
}
public void setB_id(int b_id) {
this.b_id = b_id;
}
public String getB_name() {
return b_name;
}
public void setB_name(String b_name) {
this.b_name = b_name;
}
public String getB_email() {
return b_email;
}
public void setB_email(String b_email) {
this.b_email = b_email;
}
public String getB_title() {
return b_title;
}
public void setB_title(String b_title) {
this.b_title = b_title;
}
public String getB_content() {
return b_content;
}
public void setB_content(String b_content) {
this.b_content = b_content;
}
}
package magic.board;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDBBean {
//1. 전역 BoardDBBean 객체 레퍼런스를 리턴하는 메소드
private static BoardDBBean instance = new BoardDBBean();
public static BoardDBBean getInstance(){
return instance;
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
public Connection getConnection( ) throws Exception{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
//경로 찾기
return ds.getConnection();
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//3. 전달인자로 받은 BoardBean board를 BOARDT 테이블에 삽입하는 메소드
public int insertBoard(BoardBean board) throws Exception{
int re = -1;
int number;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
ResultSet rs = null;
String sql ="";
try {
conn = getConnection();
sql = "SELECT MAX(B_ID) FROM BOARDT";//글번호 추가
pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
if(rs.next()) {//다음 쿼리 데이터가 있는 경우를 조건문으로 줌.
number = rs.getInt(1)+1;
//글번호가 가장 큰 값을 조회하여 1증가 한 값을 INSERT쿼리에 추가
} else {
number = 1;
}
sql = "INSERT INTO BOARDT VALUES (?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
// 데이터가 제대로 들어갔는지 확인 해야함
System.out.println("@@@@#### number=====>"+number);
System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
System.out.println("@@@@#### board.getB_email()=====>"+board.getB_email());
System.out.println("@@@@#### board.getB_title()=====>"+board.getB_title());
System.out.println("@@@@#### board.getB_content()=====>"+board.getB_content());
pstmt.setInt(1, number);//인덱스 번호 변경 및 글번호 (number) 추가
pstmt.setString(2, board.getB_name());
pstmt.setString(3, board.getB_email());
pstmt.setString(4, board.getB_title());
pstmt.setString(5, board.getB_content());
pstmt.executeUpdate();
re =1;
} catch(SQLException ex) {
System.out.println("추가 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
}