Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

soozya

[BACK] 게시판 글 목록 보기 본문

👩🏻‍💻프로젝트/👥팀프로젝트

[BACK] 게시판 글 목록 보기

soozya 2023. 7. 20. 21:02

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이 발생할 수 있다고 함!

 


[💻결과]