soozya
[BACK] 게시판 글 목록 보기 본문
BACKEND 구현 시 모델2 방법으로 진행하였음.
[👩🏻💻소스코드]
[BoardDAO.java]
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import model.DBConnectionMgr;
public class QNAboardDAO {
private DBConnectionMgr pool=null; //(DBConnectionMgr)에 접근하기 위해
private Connection con=null; //이미 만들어진 연결객체(Connection)를 얻어오는 것
private PreparedStatement pstmt=null; //SQL실행목적 (변경할 것만 고르기)
private ResultSet rs=null; //select
private String sql=""; //실행시킬 SQL구문 저장 목적
//생성자 만들기
public QNAboardDAO() {
try {
pool=DBConnectionMgr.getInstance();
}catch(Exception e) {
System.out.println("DB접속 오류: "+e);
}
}
//2. 글 목록
public List getArticles(int start, int end) {
ArrayList<QNAboardDTO> articleList=null;
String sql=null;
System.out.println("getArticles =>"+start+","+end);
try {
con=pool.getConnection();
sql = "select * from qna_post WHERE ROWNUM >= ? AND ROWNUM <= ? ORDER BY ref desc and post_num DESC";
//sql="select * from board order by ref desc,re_step limit ?,?";
// sql="SELECT * FROM qna_post ORDER BY post_num desc";
// sql="select * from qna_post where re_step >= ? and re_step <= ? order by ref desc";
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, start-1); //-1을 주면 전 페이지와 현재 페이지의 글이 하나 겹침
pstmt.setInt(2, end);
rs=pstmt.executeQuery();
if(rs.next()) { //누적개념
articleList=new ArrayList(end);
do {
QNAboardDTO article=new QNAboardDTO();
article=makeArticleFromResult();
articleList.add(article); //생략하면 데이터가 저장되지 않음
}while(rs.next());
}
}catch(Exception e) {
System.out.println("getArticles() 글목록보기 에러 발생: "+e);
}finally {
pool.freeConnection(con, pstmt, rs);
}
return articleList;
}
[QNAListAction.java]
package action;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
//list.jsp에서 작업한 자바코드 : ListAction처리 => 컨트롤러를거쳐 /list.jsp에 전해줌
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.QNAboardDAO;
public class QNAListAction implements CommandAction {
@Override
public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable {
// TODO Auto-generated method stub
String pageNum=request.getParameter("pageNum");
String search=request.getParameter("search");
String searchtext=request.getParameter("searchtext");
System.out.println("ListAction의 매개변수 확인");
System.out.println("pageNum="+pageNum+", search="+search+", searchtext="+searchtext);
int count=0; //총 레코드 수
List articleList=null; //화면에 출력할 레코드 저장
QNAboardDAO dbPro=new QNAboardDAO();
count=dbPro.getArticleSearchCount(search, searchtext);
System.out.println("ListAction의 현재 레코드 수(count)="+count);
// 1) 화면에 출력할 페이지 번호, 2)출력할 레코드 개수
Hashtable<String, Integer> pgList=dbPro.pageList(pageNum, count);
if(count>0) { //레코드가 하나라도 있다면
System.out.println(pgList.get("startRow")+","+pgList.get("endRow"));
articleList=dbPro.getBoardArticles(pgList.get("startRow"), //첫번째 레코드 번호
pgList.get("endRow"), //불러올 갯수
search, searchtext); //검색분야, 검색어
System.out.println("ListAction의 articleList="+articleList);
}else { //count=0
articleList=Collections.EMPTY_LIST; //비어있는 List객체 반환
}
//2. 처리한 결과를 공유(서버메모리에 저장)-> 이동할 페이지에 공유해서 사용
request.setAttribute("search", search); //검색 분야
request.setAttribute("searchtext", searchtext); //검색어
request.setAttribute("pgList", pgList); //페이징 처리 10개가 들어있어용
request.setAttribute("articleList", articleList); //${articleList}
//3.공유해서 이동할 수 있도록 페이지를 지정
return "/QNApost.jsp"; //컨트롤러가 view를 받아서 이동시키면서 공유O
}
}
[💬설명]
◾ FRONT 부분의 경우 다른 팀원이 진행하였고, BACK에 해당하는 부분만 코딩을 했다.
BoardDAO
1️⃣ try~catch 예외처리를 통해 글 번호에 따라 정렬되도록 페이징 처리에 대한 sql 구문 입력
◾ oracle의 sql 구문으로 작성함
2️⃣ select를 통해 데이터를 찾고, 게시판에 필요한 데이터를 누적적으로 저장
◾ 최상위 클래스인 Exception를 사용하여 모든 가능성을 열어둠
QNAListAction
3️⃣ 레코드(=count)가 있는 경우, 첫번째 레코드 번호와 함께 레코드를 불러오고,
레코드가 없는 경우 'articleList=Collections.EMPTY_LIST'를 통해 비워둠
◾ null을 쓰게 되면, NullPointerException이 발생할 수 있다고 함!
[💻결과]
'👩🏻💻프로젝트 > 👥팀프로젝트' 카테고리의 다른 글
[BACK] 글 수정하기 (0) | 2023.08.02 |
---|---|
[BACK] 게시판 글 쓰기, 상세보기 (0) | 2023.07.29 |
[FRONT] 관리자 페이지 (0) | 2023.04.28 |
[FRONT] 회원정보 확인하기 (0) | 2023.04.26 |
[FRONT] 회원가입 페이지 (0) | 2023.04.16 |