글쓰기 기능을 구현하기 위해서는
1. 글쓰기 2. 글쓰기 처리 3. 글쓰기 저장 4. 전체 게시글 보기 순서대로 기능을 구현해야한다.
저번 포스팅에서는 글쓰기 기능까지 구현하였다.
요번 포스팅에서는 글쓰기 저장 기능까지 구현할 것이다.
< BoardWriteProc.jsp >
<%@page import="model.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<body>
<%
request.setCharacterEncoding("euc-kr");//한글처리
%>
<!-- 게시글 작성한 데이터를 한번에 읽어드림 -->
<jsp:useBean id ="boardbean" class="model.BoardBean">
<jsp:setProperty name = "boardbean" property="*"/>
</jsp:useBean>
<%
//데이터베이스 쪽으로 빈클래스를 넘겨줌
BoardDAO bdao = new BoardDAO();
//데이터 저장 메소드를 호출
bdao.insertBoard(boardbean);
%>
</body>
</html>
게시글 작성 폼에서 사용한 데이터 값을 받기 위해
jsp usebean을 사용하여 데이터 값을 받았다.
그리고 받은 데이터 값을 다시 데이터베이스(오라클) 쪽으로 넘겨주기 위해
BoardDAO에 Insert 메소드를 만들어줘야한다.
< BoardDAO.java >
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDAO
{
Connection con;
PreparedStatement pstmt;
ResultSet rs;
//데이터 베이스의 커넥션 풀을 사용하도록 설정하는 메소드
public void getCon()
{
try
{
Context initctx = new InitialContext();
Context envctx = (Context)initctx.lookup("java:comp/env");
DataSource ds = (DataSource)envctx.lookup("jdbc/pool");
//datasource
con = ds.getConnection();
} catch (Exception e)
{
e.printStackTrace();
}
}
//하나의 새로운 게시글이 넘어와서 저장되는 메소드
public void insertBoard(BoardBean bean)
{
getCon();
//빈클래스에 넘어오지 않았던 데이터들을 초기화 해줘야 한다.(board의 전체 열은 11개인데 총 5개만 넘어옴)
int ref=0;//글 그룹을 의미 = 쿼리를 실행시켜서 가장 큰 ref 값을 가져온 후 +1을 더해주면 된다.
int re_step=1;//새 글(부모 글)이기 때문에 초기 값을 1을 춰야함
int re_level = 1;
try
{
//가장 큰 ref값을 조회하는 쿼리 준비
String refsql = "select max(ref) from board";
//쿼리 실행 객체
pstmt = con.prepareStatement(refsql);
//쿼리 실행 후 결과를 리턴
rs = pstmt.executeQuery();
if(rs.next())//결과 값이 있다면
{
ref = rs.getInt(1)+1; //최대값에 +1을 더해서 글 그룹을 설정
}
//실제로 게시글 전체 값을 데이터 테이블에 저장
String sql = "insert into board values(board_seq.NEXTVAL,?,?,?,?,sysdate,?,?,?,0,?)";
pstmt = con.prepareStatement(sql);
//?에 값을 맵핑
pstmt.setString(1, bean.getWriter());
pstmt.setString(2, bean.getEmail());
pstmt.setString(3, bean.getSubject());
pstmt.setString(4, bean.getPassword());
pstmt.setInt(5, ref);
pstmt.setInt(6, re_step);
pstmt.setInt(7, re_level);
pstmt.setString(8, bean.getContent());
//쿼리를 실행하시오
pstmt.executeUpdate();
//자원 반납
con.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
ref는 새글 일 때 최댓값에서 +1 씩 증가해야하기 때문에
우선은 0으로 선언하였다.
rs_step과 rs_level의 경우 새글의 경우 step과 level이 1이므로 1로 선언하였다.
글을 작성할 때는 총5개의 열 값만 작성하는
데이터에 저장 될 때는 11개의 열 값이 들어가야 함으로
board 테이블에 들어가야 할 11개의 값을 insert 해야한다.
그중 게시판 번호의 경우 board 테이블 생성당시
시퀀스로 글을 쓸때마다 자동으로 1씩 증가하도록 설정하였다.
또한 조회수를 의미하는 readcount 또한 조회수 0에서 시작해야함으로 0을 넣었다.
sysdate는 오라클 데이터에 있는 현재 시각을 기준으로 데이터에 삽입하기 때문에
sysdate를 ?대신 넣었다.
'예비개발자 > JSP' 카테고리의 다른 글
[ 웹 쇼핑몰 ] 섹션4 웹 프로그램 게시판 3 (0) | 2023.04.16 |
---|---|
[ 웹 쇼핑몰 ] 섹션4 웹 프로그램 게시판 1,2 (0) | 2023.04.16 |
[ 웹 쇼핑몰 ] 섹션3 JSP Session을 통한 로그인 처리 2 (0) | 2023.04.16 |
[ 웹 쇼핑몰 ] 섹션3 JSP Session을 통한 로그인 처리 1 (0) | 2023.04.16 |
[ 웹 쇼핑몰 ] 섹션3 JSP 쿠키 & 세션 4 (0) | 2023.04.16 |
댓글