Servlet/JSP - 일반게시글 작성3(파일첨부테이블), 상세페이지, 게시글 수정
1. 일반게시글 작성3(파일첨부테이블)
<com.kh.board.controller>BoardInsertController
2) 값뽑기 : 카테고리번호, 제목, 내용, 게시글을 작성한 회원번호를 Board객체로 가공
String userNo = multiRequest.getParameter("userNo");
String category = multiRequest.getParameter("category");
String boardTitle = multiRequest.getParameter("title");
String boardContent = multiRequest.getParameter("content");
3-1) 가공 => 첫번째 insert문에 해당
Board b = new Board();
b.setCategory(category);
b.setBoardTitle(boardTitle);
b.setBoardContent(boardContent);
b.setBoardWriter(userNo);
3-2) 가공 => 두번째 insert => 선택적(첨부파일이 있을 경우에만 insert)
case1 : 하나의 게시글에 하나의 첨부파일(테이블로 따로 뺄 필요 없음)
case2 : 하나의 게시글에 여러개의 첨부파일(파일저장테이블을 따로 만들어야 함)
=> 파일정보를 저장할 VO클래스 만들기
<com.kh.board.model.vo>Attachment
package com.kh.board.model.vo;
import java.sql.Date;
public class Attachment {
private int fileNo;
private int refBno;
private String originName;
private String changeName;
private String filePath;
private Date uploadDate;
private int fileLevel;
private String status;
public Attachment() {
super();
}
public Attachment(int fileNo, int refBno, String originName, String changeName, String filePath, Date uploadDate,
int fileLevel, String status) {
super();
this.fileNo = fileNo;
this.refBno = refBno;
this.originName = originName;
this.changeName = changeName;
this.filePath = filePath;
this.uploadDate = uploadDate;
this.fileLevel = fileLevel;
this.status = status;
}
public int getFileNo() {
return fileNo;
}
public void setFileNo(int fileNo) {
this.fileNo = fileNo;
}
public int getRefBno() {
return refBno;
}
public void setRefBno(int refBno) {
this.refBno = refBno;
}
public String getOriginName() {
return originName;
}
public void setOriginName(String originName) {
this.originName = originName;
}
public String getChangeName() {
return changeName;
}
public void setChangeName(String changeName) {
this.changeName = changeName;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public Date getUploadDate() {
return uploadDate;
}
public void setUploadDate(Date uploadDate) {
this.uploadDate = uploadDate;
}
public int getFileLevel() {
return fileLevel;
}
public void setFileLevel(int fileLevel) {
this.fileLevel = fileLevel;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public String toString() {
return "Attachment [fileNo=" + fileNo + ", refBno=" + refBno + ", originName=" + originName + ", changeName="
+ changeName + ", filePath=" + filePath + ", uploadDate=" + uploadDate + ", fileLevel=" + fileLevel
+ ", status=" + status + "]";
}
}
<com.kh.board.controller>BoardInsertController
- Attachment 객체 초기화
Attachment at = null;
- 첨부파일의 유무 여부를 아는 방법
multiRequest.getOriginalFileName("키값")
첨부파일이 있으면 "원본파일명" / 첨부파일이 없으면 null리턴
if(multiRequest.getOriginalFileName("upfile") != null) {
첨부파일이 존재함 => attechment vo로 가공
①원본파일명 set
at = new Attachment();
at.setOriginName(multiRequest.getOriginalFileName("upfile"));
② 수정파일명 set : multiRequest.getFilesystemName("키값");
at.setChangeName(multiRequest.getFilesystemName("upfile"));
③ 파일경로
at.setFilePath("resources/board_upfiles");
4) Service에 요청
int result = new BoardService().insertBoard(b, at);
5) 응답화면 지정
- 성공 시 list.bo?cpage=1로 url지정
if(result > 0) {
request.getSession().setAttribute("alertMsg", "게시글 등록에 성공하였습니다.");
response.sendRedirect(request.getContextPath()+"/list.bo?cpage=1");
//이 url로 다시 재요청 보내도록 (url에 대한 응답을 다시 받음)
}
- 실패 시,
만약에 첨부파일이 있었다면, resources폴더에 board_upfiles폴더에 이미 업로드 된 파일을 굳이 서버에 보관할 필요 X
=> 파일을 삭제해주어야 함 delete() 호출
else {
if(at != null) {
new File(savePath + at.getChangeName()).delete(); //파일 객체 생성후 사용 가능
}
request.setAttribute("arrorMsg", "게시글 작성 실패");
request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response); //위임하기
}
<com.kh.board.model.service>BoardService
Board테이블에 INSERT 반드시 해야함 (필수)
첨부파일은 존재할 경우에만 ATTACHMENT테이블에 INSERT
1) BOARD테이블에 INSERT
public int insertBoard(Board b, Attachment at) {
Connection conn = getConnection();
int result1 = new BoardDao().insertBoard(conn, b);
<com.kh.board.model.dao>BoardDao
public int insertBoard(Connection conn, Board b) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("insertBoard");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, Integer.parseInt(b.getCategory()));
pstmt.setString(2, b.getBoardTitle() );
pstmt.setString(3, b.getBoardContent() );
pstmt.setInt(4, Integer.parseInt(b.getBoardWriter()));
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
<com.kh.board.model.service>BoardService
2) ATTACHMENT테이블에 INSERT
int result2 = 1; //첨부파일이 없을 수도 있기 때문에 (첨부파일 실패하면 다시 0으로 초기화되기때문에 rollback처리 가능)
if(at != null) {
result2 = new BoardDao().insertAttachment(conn, at);
} //else구문을 필요하지 않음
** 반드시 result2는 초기화를 1로 해주어야 함
<com.kh.board.model.dao>BoardDao
public int insertAttachment(Connection conn, Attachment at) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("insertAttachment");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, at.getOriginName());
pstmt.setString(2, at.getChangeName());
pstmt.setString(3, at.getFilePath());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
<쿼리문>
- insertBoard
<entry key="insertBoard">
INSERT
INTO
BOARD
(
BOARD_NO,
BOARD_TYPE,
CATEGORY_NO,
BOARD_TITLE,
BOARD_CONTENT,
BOARD_WRITER
)
VALUES
(
SEQ_BNO.NEXTVAL,
1,
?,
?,
?,
?
)
</entry>
- insertAttachment
<entry key="insertAttachment">
INSERT
INTO
ATTACHMENT
(
FILE_NO,
REF_BNO,
ORIGIN_NAME,
CHANGE_NAME,
FILE_PATH
)
VALUES
(
SEQ_FNO.NEXTVAL,
SEQ_BNO.CURRVAL,
?,
?,
?
)
</entry>
INSERT하기 전 INSERT하고 있는 BOARDNO(REF_BNO)을 넣어야 함 (아직 게시글이 생성되지 않았기 때문에)
SEQ_BNO.CURRVAL => 마지막으로 NEXTVAL을 성공한 시퀀스 번호
2. 상세페이지
<boardListView.jsp>
<script>
$(function(){
$('.list-area>tbody>tr').click(function(){
location.href = '<%=contextPath%>/detail.bo?bno=' + $(this).children().eq(0).text();
});
});
</script>
tr요소를 클릭하면 그 게시글의 상세페이지로 요청 => 구분하기 위해서 boardNo가 필요함(GET방식으로 넘겨주기)
<com.kh.board.controller>BoardDetailController
1) GET 방식 => 인코딩 X
2) 값 추출
int boardNo = Integer.parseInt(request.getParameter("bno"));
3) 가공 => 하나이므로 처리 X
4-1) 조회수 증가
* BoardService를 자주 사용할 예정이기에 변수를 빼놓기
BoardService bService = new BoardService();
int result = bService.increaseCount(boardNo);
if(result>0) {
=> if문 안에 들어왔다(조회수가 증가했다) == 조회를 성공
4-2) 상세페이지 요청(조회수증가성공)
(1) board조회
Board b = bService.selectBoard(boardNo);
(2) attachment조회
Attachment at = bService.selectAttachment(boardNo);
(3) 조회한 b, at Attribute에 담기
request.setAttribute("b", b);
request.setAttribute("at", at);
(4) 화면 => forwarding
request.getRequestDispatcher("views/board/boardDetailView.jsp").forward(request, response);
4-3) 조회수 증가 실패 == 조회실패
else {
request.setAttribute("alertMsg", "게시글 조회에 실패하였습니다.");
request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);
}
<com.kh.board.model.service>BoardService
* 총 3개의 service
- increaseCount
public int increaseCount(int boardNo) {
Connection conn = getConnection();
int result = new BoardDao().increaseCount(conn, boardNo);
if(result>0) {
commit(conn);
}else {
rollback(conn);
}
return result;
}
- selectBoard
public Board selectBoard(int boardNo) {
Connection conn = getConnection();
Board b = new BoardDao().selectBoard(conn, boardNo);
close(conn);
return b;
}
- selectAttachment
public Attachment selectAttachment(int boardNo) {
Connection conn = getConnection();
Attachment at = new BoardDao().selectAttachment(conn, boardNo);
close(conn);
return at;
}
<com.kh.board.model.Dao>BoardDao
- increaseCount
public int increaseCount(Connection conn, int boardNo) {
int result = 0;
PreparedStatement pstmt = null; //원래는 PreparedStatement pstmt;라고 변수를 선언하는게 맞음(참조자료형은 기본값이 null)
String sql = prop.getProperty("increaseCount");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, boardNo);
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
- selectBoard
public Board selectBoard(Connection conn, int boardNo) {
ResultSet rset = null;
PreparedStatement pstmt = null;
Board b = null;
String sql = prop.getProperty("selectBoard");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, boardNo);
rset = pstmt.executeQuery();
if(rset.next()){
b = new Board();
b.setBoardNo(rset.getInt("BOARD_NO"));
b.setCategory(rset.getString("CATEGORY_NAME"));
b.setBoardTitle(rset.getString("BOARD_TITLE"));
b.setBoardWriter(rset.getString("USER_ID"));
b.setCreateDate(rset.getDate("CREATE_DATE"));
b.setBoardContent(rset.getString("BOARD_CONTENT"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rset);
close(pstmt);
}
return b;
}
- selectAttachment
public Attachment selectAttachment(Connection conn, int boardNo) {
Attachment at = null;
ResultSet rset = null;
PreparedStatement pstmt = null;
String sql = prop.getProperty("selectAttachment");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, boardNo);
rset = pstmt.executeQuery();
if(rset.next()) {
at = new Attachment();
at.setFileNo(rset.getInt("FILE_NO"));
at.setOriginName(rset.getString("ORIGIN_NAME"));
at.setChangeName(rset.getString("CHANGE_NAME"));
at.setFilePath(rset.getString("FILE_PATH"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
close(rset);
close(pstmt);
}
return at;
}
<boardDetailView.jsp>
- 사용자에게 보여줄 상세페이지 화면 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import ="com.kh.board.model.vo.*" %>
<%
Board b = (Board)request.getAttribute("b");
//게시글 번호, 카테고리명, 제목, 내용, 작성자 아이디, 작성일
Attachment at = (Attachment)request.getAttribute("at");
//파일번호, 원본명, 수정명, 저장경로
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>일반게시판 상세보기</title>
<style>
.outer{
width: 1000px;
margin: auto;
background-color: #88A201;
margin-top: 5px;
color: white;
}
#detail-area{
text-align: center;
border: 1px solid wheat;
}
a{
text-decoration: none;
color: skyblue;
}
</style>
</head>
<body>
<%@ include file = "../common/menubar.jsp" %>
<div class="outer">
<br>
<h2 align="center">일반게시판 상세보기</h2>
<br>
<table align="center" id="detail-area" border="1">
<tr>
<th width="70">카테고리</th>
<td width="100"><%=b.getCategory() %></td>
<th width="70">제목</th>
<td width="380"><%=b.getBoardTitle() %></td>
</tr>
<tr>
<th>작성자</th>
<td><%=b.getBoardWriter() %></td>
<td>작성일</td>
<td><%=b.getCreateDate() %></td>
</tr>
<tr>
<th>내용</th>
<td colspan="3">
<p style="height: 200px;"><%=b.getBoardContent() %></p>
</td>
</tr>
<tr>
<th>첨부파일</th>
<td colspan="3">
<%if(at==null){ %>
<!-- 첨부파일 X -->
첨부파일이 없습니다.
<%} else{ %>
<!-- 첨부파일 O -->
<a download="<%=at.getOriginName() %>" href="<%=contextPath%>/<%=at.getFilePath()%>/<%=at.getChangeName() %>"><%=at.getOriginName() %></a>
<%} %>
</td>
</tr>
</table>
<br><br>
</div>
</body>
</html>
* 사용자가 첨부한 파일을 download할 수 있도록 하려면 태그 속성에 'download'속성추가
+/ 원본명으로 다운로드되게 하고 싶으면 속성지정해주기
3. 게시글 수정하기
로그인한 사용자고 현재 이게시글의 작성자일 경우에만 수정하기 버튼을 활성화
<boardDetailView.jsp>
<div align="center">
<a class="btn btn-sm btn-secondary" href="<%=contextPath%>/list.bo?cpage=1">목록</a>
<%if(loginUser != null && loginUser.getUserId().equals(b.getBoardWriter())){ %>
<a class="btn btn-sm btn-warning" href="<%=contextPath%>/updateForm.bo?bno=<%=b.getBoardNo()%>">수정</a>
<%} %>
<br><br>
</div>
<com.kh.board.controller>BoardUpdateFormController
수정은 사용자가 기존에 입력한 값들이 페이지 내에 존재해야 수정이 가능함
=> 즉, 원래 데이터부터 조회를 해야한다.
1) 우선적으로 해야 할 일 : 카테고리 전체 조회해오기
ArrayList<Category> list = new BoardService().selectCategory();
2) 해당 글 번호 뽑기
int boardNo = Integer.parseInt(request.getParameter("bno"));
3-1) 글번호에 해당하는 Board테이블 행조회
Board b = new BoardService().selectBoard(boardNo);
3-2) 글번호에 해당하는 Attechment테이블의 행 조회
Attachment at = new BoardService().selectAttachment(boardNo);
4) 값 담기
request.setAttribute("list", list);
request.setAttribute("at", at);
request.setAttribute("b", b);
5) 화면조회(수정)
request.getRequestDispatcher("views/board/boardUpdateForm.jsp").forward(request, response);
<BoardUpdateForm>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList, com.kh.board.model.vo.*" %>
<%
ArrayList<Category> list = (ArrayList<Category>)request.getAttribute("list");
Board b = (Board)request.getAttribute("b");
Attachment at = (Attachment)request.getAttribute("at");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>일반 게시글 수정</title>
<style>
body{
box-sizing: border-box;
}
.outer{
width: 1000px;
margin: auto;
background-color: #88A201;
margin-top: 5px;
color: white;
}
#update-form input, #update-form textarea{
width: 100%;
box-sizing: border-box;
}
#update-form>table{
border: 1px solid wheat;
}
</style>
</head>
<body>
<%@ include file="../common/menubar.jsp" %>
<div class="outer">
<br>
<h2 align="center">일반 게시글 수정</h2>
<br>
<form action="<%=contextPath%>/update.bo" method="post" id="update-form" enctype="multipart/form-data">
<!-- 제목, 내용, 카테고리, 제출버튼, 첨부파일 -->
<input type="hidden" value="<%=b.getBoardNo()%>" name="boardNo">
<table align="center">
<tr>
<th width="150">카테고리</th>
<td width="600">
<select name="category">
<% for(Category c : list){ %>
<option value="<%= c.getCategoryNo()%>"><%= c.getCategoryName()%></option>
<%}%>
</select>
<script>
$(function(){
$('#update-form option').each(function(){
if($(this).text()=='<%=b.getCategory()%>'){
$(this).attr('selected', 'true');
}
})
})
</script>
</td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="title" required value="<%=b.getBoardTitle()%>"></td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="content" style="resize: none;" rows="10" required><%=b.getBoardContent() %></textarea>
</td>
</tr>
<tr>
<th>첨부파일</th>
<!-- 기존파일이 존재했다면 원본파일명을 보여주자 aaa.jpg -->
<td><input type="file" name="reUpfile">
<% if(at != null){ %>
<%=at.getOriginName()%>
<input type="hidden" name="originFileNo" value=<%=at.getFileNo()%>>
<input type="hidden" name="originFileName" value=<%=at.getChangeName()%>>
<%} %>
</td>
</tr>
</table>
<br>
<div align="center">
<button type="submit">수정</button>
<button type="reset">취소</button>
</div>
</form>
</div>
</body>
</html>
1) 카테고리를 사용자가 이전에 지정했던 값을 기본값으로 놓기
=> jQuery이용하기
$(function(){
$('#update-form option').each(function(){
if($(this).text()=='<%=b.getCategory()%>'){
$(this).attr('selected', 'true');
}
})
})
2) 기존파일이 존재했다면 파일명 보여주기
<% if(at != null){ %>
<%=at.getOriginName()%>
<input type="hidden" name="originFileNo" value=<%=at.getFileNo()%>>
<input type="hidden" name="originFileName" value=<%=at.getChangeName()%>>
<%} %>
- 새로 만든 파일 : name == reUpFile
- 기존 파일 : originFileNo과 originFileName
originFileNo과 originFileName을 hidden으로 가져가기(but, 파일이존재할 때만 ! 왜냐면 없는데 가져가면 NullPointException발생할 수 있음
1) POST => 인코딩
request.setCharacterEncoding("UTF-8");
2-1) 값뽑기 전에 => 파일이 전송될 것인가를 먼저 파악
if(ServletFileUpload.isMultipartContent(request)) {
=> multipart/form-data로 잘 전달되었을 때만 내용을 수행되게 끔 조건
파일업로드 => 2가지 설정
① 전송파일 용량 제한 int maxSize => 10Mbyte
int maxSize = 1024*1024*10;
② 전달된 파일을 저장시킬 폴더의 물리적인 경로를 알아내기(String savePath)
String savePath = request.getSession().getServletContext().getRealPath("/resources/board_upfiles");
저장된 파일명 수정 후 서버에 업로드
Multipart 객체를 생성함으로써 서버에 파일이 업로드
request로 값을 뽑을 수 없기 때문에 multipartRequest로 이관 함 (내가 지정한 이름값과 인코딩방식으로 이름변경 후 )
***이부분 다시 한 번보기
MultipartRequest multiRequest = new MultipartRequest(request, savePath, maxSize, "UTF-8", new MyFileRenamePolicy());
- UPDATE BOARD : 공통적으로 수행해야하는 SQL
2-2) 값뽑기 request => multiRequest
int boardNo = Integer.parseInt(multiRequest.getParameter("boardNo"));
String category = multiRequest.getParameter("category");
String title = multiRequest.getParameter("title");
String content = multiRequest.getParameter("content");
3-1) VO = BOARD관련
Board b = new Board();
b.setBoardNo(boardNo);
b.setBoardTitle(title);
b.setBoardContent(content);
b.setCategory(category);
3-2) VO = Attachment
Attachment at = null;
실제 첨부파일이 있을 경우에만 => 객체생성
없으면 => null
- 새로운 첨부파일 명을 반환해주는 메소드(getter)를 이용해서 첨부파일이 있는 지 확인
if(multiRequest.getOriginalFileName("reUpfile") != null) {
if문 내에 들어오면 기존 파일이 존재한다는 의미, 기존파일이 가지고 있던 파일 번호를 attachment객체에 담을 것
at.setFileNo(Integer.parseInt(multiRequest.getParameter("originFileNo")));
- 새로운 파일에 대한 정보 담기
at = new Attachment();
at.setOriginName(multiRequest.getOriginalFileName("reUpfile"));
at.setChangeName(multiRequest.getFilesystemName("reUpfile"));
at.setFilePath("resources/board_upfiles");
- case 1) 첨부파일이 있을 경우 + 원본파일도 있을 경우 DELETE
if(multiRequest.getParameter("originFileNo")!=null) {
= 중첩 if문
> step 1 : 기존파일이 가지고 있던 파일 번호를 attachment객체에 담을 것
at.setFileNo(Integer.parseInt(multiRequest.getParameter("originFileNo")));
> step 2 : 기존에 서버에 존재하던 첨부파일을 삭제 = new File(savePath + 기존의 파일이름).delete();
new File(savePath + multiRequest.getParameter("originFileName")).delete();
case 2) 새로운 첨부파일은 있었지만 기존 파일이 없을 경우 => INSERT
+ 어떤 게시글의 첨부파일인지 boardNo (REF_BNO) 필요
at.setRefBno(boardNo);
4) 서비스요청
: 경우에 따라 모두 한 개의 트랜잭션으로 묶어야 함
어떤 case가 존재할 지 Service단 가기 전에 생각하면 좋음
case 1) 새로운 첨부파일 X => b, null => BOARDUPDATE
case 2) 새로운 첨부파일 O, 기존첨부파일 O => BOARD UPDATE, ATTACHMENT UPDATE
case 3) 새로운 첨부파일 O, 기존첨부파일 X => BOARD UPDATE, ATTACHMENT INSERT
int result = new BoardService().updateBoard(b, at);
5) 결과에 따른 응답뷰 지정
- 성공 => 상세보기 페이지 이동
if(result > 0) {
request.getSession().setAttribute("alert", "게시글이 성공적으로 수정되었습니다.");
response.sendRedirect(request.getContextPath() + "/detail.bo?bno=" + boardNo);
- 실패 => 에러페이지
}else {
request.setAttribute("alertMsg", "게시글 수정 실패");
request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);
}
<com.kh.board.model.service>BoardService
- result1 = 첨부파일이 없을 때 (case1)
- result2= 기존첨부파일이 있을 때(case2) / 없을 때 (case3)
public int updateBoard(Board b, Attachment at) {
Connection conn = getConnection();
int result1 = new BoardDao().updateBoard(b, conn);
//ATTACHMENT TABLE과 관련된 작업
int result2 = 1; //없을수도 있기 때문
if(at != null) {
if(at.getFileNo() != 0) {
//기존 첨부파일 있었을 경우 : REF_BNO가 기본값이 1부터 이기 때문에 0(int초기값)이 아니면 기존 파일이 있다는 뜻
result2 = new BoardDao().updateAttachment(at, conn);
} else {
//기존 첨부파일 없었을 경우
result2 = new BoardDao().insertNewAttachment(conn, at);
}//아닐경우 ATTACHMENT에 할 게 없으므로 else 구문 사용 X
}
if((result1*result2) > 0) {
commit(conn);
}else {
rollback(conn);
}
close(conn);
return (result1*result2);
}
<com.kh.board.model.Dao>BoardDao
- updateBoard
public int updateBoard(Board b, Connection conn) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("updateBoard");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,Integer.parseInt(b.getCategory()));
pstmt.setString(2, b.getBoardTitle());
pstmt.setString(3, b.getBoardContent());
pstmt.setInt(4, b.getBoardNo());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(pstmt);
}
return result;
}
- updateAttachment
public int updateAttachment(Attachment at, Connection conn) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("updateAttachment");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, at.getOriginName());
pstmt.setString(2, at.getChangeName());
pstmt.setString(3, at.getFilePath());
pstmt.setInt(4, at.getFileNo());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(pstmt);
}
return result;
}
- insertNewAttachment
public int insertNewAttachment(Connection conn, Attachment at) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("insertNewAttachment");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, at.getRefBno());
pstmt.setString(2, at.getOriginName());
pstmt.setString(3, at.getChangeName());
pstmt.setString(4, at.getFilePath());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(pstmt);
}
return result;
}
<쿼리문>
- updateBoard
<entry key="updateBoard">
UPDATE
BOARD
SET
CATEGORY_NO = ?,
BOARD_TITLE = ?,
BOARD_CONTENT = ?
WHERE
BOARD_NO = ?
</entry>
- updateAttachment
<entry key="updateAttachment">
UPDATE
ATTACHMENT
SET
ORIGIN_NAME = ?,
CHANGE_NAME = ?,
FILE_PATH = ?,
UPLOAD_DATE = SYSDATE
WHERE
FILE_NO = ?
</entry>
- insertNewAttachment
<entry key="insertNewAttachment">
INSERT
INTO
ATTACHMENT
(
FILE_NO,
REF_BNO,
ORIGIN_NAME,
CHANGE_NAME,
FILE_PATH
)
VALUES
(
SEQ_FNO.NEXTVAL,
?,
?,
?,
?
)
</entry>