BoardWriterProc.jsp
<%@page import="model.BoardDAO"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 강의와 다르게 html 적 요소는 제거하였다. 왜냐하면은 BoardWriterProc.jsp 페이지에서는 userBean 작업만 하기 때문이다. --> <% request.setCharacterEncoding("UTF-8");//한글지원 %> <!-- 게시글 작성에 데이터를 한번에 읽어드림 --> <jsp:useBean id="boardbean" class="model.BoardBean"> <jsp:setProperty name="boardbean" property="*" /> </jsp:useBean> <% //데이터 베이스 쪽으로 변경클래스를 넘겨줌 BoardDAO bdao =new BoardDAO(); //데이커 저장 메소드를 호출 bdao.insertBoard(boardbean); %>
강의에서는 ref 값을 구할때 쿼리를 날린후 max 값을 가져왔는데,
//가장 큰 ref값을 읽어오는 쿼리 준비 String refsql ="select max(ref) from board "; //쿼리실행 객체 pstmt =con.prepareStatement(refsql); //쿼리실행후 결과를 리턴 rs=pstmt.executeQuery(); if(rs.next()){ //결과 값이 였다면 ref =rs.getInt(1)+1;//최대값에 +1 를 더해서 글그룹을 설정 }
nval 함수를 사용하면 될 것이다. max 값이 널이거나 없으면 1로 초기화 할 수 있다.
nvl(max(ref)+1, 1)
따라서, insert 시에 다음과 같은 쿼리문으로 작성하면 될 것이다.
~~~ values(board_seq.NEXTVAL, ? ,? , ?, ?, sysdate, nvl(max(ref)+1, 1), ?, ? , 0, ? ) ";
참조 할 것: http://macaronics.net/index.php/m01/spring/view/148
class BoardDAO
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; //데이터 베이스의 커넥션을 사용하도록 설정하는 메소드 //lib 에 ojdbc7.jar 라이브러리 등록 할것 maver.repository 사이트 검색후 다운로드 public void getCon(){ try{ //외부에서 데이터를 읽어들어야 하기에 Context initctx =new InitialContext(); //톰켓 서버에 정보를 담아놓은 고으로 이동 Context envctx =(Context) initctx.lookup("java:comp/env/"); //데이터 소스 객체를 선언 DataSource ds =(DataSource) envctx.lookup("jdbc/pool"); //데이터 소스를 기준으로 커넥션을 연결해주시오 con =ds.getConnection(); }catch(Exception e){ e.printStackTrace(); } } //하나의 새로운 게시글이 넘어와서 저장되는 메소드 public void insertBoard(BoardBean bean){ //빈클래스에 넘어오지 않았던 데이터들을 초기화 해주어야 합니다. getCon(); //빈클래스에 넘어오지 않았던 데이터들을 초기화 해주어야 합니다. int ref=0; //글그룹을 의미 = 쿼리를 실행시켜서 가장큰 ref 값을 자져온 후 +1을 더해주면됨 int re_step=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, ?, ? , ?, ? , )"; String sql =" insert into BOARD (NUM, WRITER, EMAIL, SUBJECT, PASSWORD, REG_DATE, REF, "; sql +=" REF_STEP, REF_LEVEL, READCOUNT, CONTENT) "; sql +=" 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(); }catch(Exception e){ e.printStackTrace(); }finally{ try{ //자원 반납 if(pstmt!=null)con.close(); if(con!=null)con.close(); }catch(Exception e){ e.printStackTrace(); } } } }
동영상 강좌와 다르게 모바일 적용이 가능한 반응형 부트스트랩을 사용하였다.
여기서는 jsp 를 배우는 강좌 이기 때문에 html 적 요소에는 비중있게 생각 하지 않아도 될 것이다.
동영상 강좌와 다르게 모바일 적용이 가능한 반응형 부트스트랩을 사용하였다.
여기서는 jsp 를 배우는 강좌 이기 때문에 html 적 요소에는 비중있게 생각 하지 않아도 될 것이다.
또한, 일부 자바 코드는 제 입맛에 맞게 변경 하였습니다.
혹시, 이 강의를 들으면서 제 글을 읽고 소스코드를 참조하는 수강생이 있다면 동영상의 코드와 다르다고 생각지 마세요. 대부분 동여상 내용과 같으니 학습에 도움이 될거라 생각 합니다.
소스 : https://github.com/braverokmc79/jsp_sin
유튜브 동영상 출처 :
강사 : 신형섭(잭임연구원)
저작권 : (주)소프트캠퍼스 http://www.softcampus.co.kr 더많은 무료 강의는 사이트에서 확인하실수 있습니다.
댓글 ( 4)
댓글 남기기