티스토리 뷰
하는 일 때문에 수정이 좀 늦었다.
수정된 내용들은 아래와 같다.
1. 지난번 버전의 SQL문을 사용시 ORA-00936: missing expression 에러 발생.
- 띄어쓰기를 제대로 안하고 괄호를 닫아주지 않아서 발생하였다... 눈이 침침했나보다...핳핳헿ㅎ헤
2. 동적쿼리 수정
- 지난번 버전에는 동적쿼리 함수인 dynamicSql()이 존재했고, boardList()함수에는 SQL문이 두개나 존재했었다.
동적쿼리의 의미와 존재이유에 알맞지 않았기 때문에 수정했다. (하나의 SQL문장과 동적쿼리 담당 함수 하나로 해결)
사용자가 검색조건 및 검색어 입력의 여부를 판단하여 그때에 알맞은 게시글 목록들을 갖고 올 수 있도록 수정했다.
간단하게 말해서 fs변수(검색조건)가 null이면(덩달아 ss변수도 null일 경우도 포함했다ㅋㅋㅋ) 검색을 하지 않은 것으로 판
단! null이 아닐경우 사용자가 검색조건과 검색어를 파라미터로 넘겨준 것이므로 검색한 것으로 판단!
package sjb.board.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class SJBoardDAO {
private Connection conn;
private PreparedStatement ps;
public static SJBoardDAO dao;
private final String URL="jdbc:oracle:thin:@localhost:1521:XE";
private final String DRIVER="oracle.jdbc.driver.OracleDriver";
private final String USER="hr";
private final String PWD="hr";
private String sql="";
public SJBoardDAO() {
//클래스 이름으로 오라클드라이버 메모리 할당(리플렉션)
try{
Class.forName(DRIVER);
}catch(Exception ex){
System.out.println("생성자 Exception발생 : "+ex.getMessage());
}
}
//객체생성시 null값 처리
public static SJBoardDAO newInstance(){
if(dao==null){
dao=new SJBoardDAO();
}return dao;
}
//오라클 연결
public void getConnection(){
try{
conn=DriverManager.getConnection(URL, USER, PWD);
}catch(Exception ex){
System.out.println("커넥션 Exception발생 : "+ex.getMessage());
}
}
//오라클 해제
public void disConnection(){
try{
if(ps!=null)ps.close();
if(conn!=null)conn.close();
}catch(Exception ex){
System.out.println("커넥션 해제 Exception발생 : "+ex.getMessage());
}
}
/*
* 게시판 조건검색 동적쿼리 생성
* param fs = 검색 조건
* param ss = 검색어
*/
public String dynamicSql(String fs, String ss){
//동적쿼리 변수
String dynamicQuery = "";
//검색을 하지 않을 경우
if(fs == null && ss == null){
dynamicQuery = "WHERE 0=0";
//검색을 할 경우
}else{
if(fs=="name"){
dynamicQuery = "WHERE name LIKE '%"+ss+"%' ";
}else if(fs=="subject"){
dynamicQuery = "WHERE subject LIKE '%"+ss+"%' ";
}else if(fs=="content"){
dynamicQuery = "WHERE content LIKE '%"+ss+"%' ";
}
}
return dynamicQuery;
}
//기능처리
/*
* 게시판 게시글 리스트 출력
* param page = 현재 페이지
* param fs = 검색 조건
* param ss = 검색어
*/
public ArrayList<SJBoardDTO> boardList(
int curPage, int start, int end, String fs, String ss
){
//게시글 리스트를 저장할 배열 boardList 선언
ArrayList<SJBoardDTO> boardList = new ArrayList<SJBoardDTO>();
//DB관련 작업
try{
//DB연결
getConnection();
//SQL문 작성
sql = "SELECT no,name,subject,regdate,readnum,step,ref,jump,valiDel,rownum " +
"FROM " +
"(SELECT A.*, rownum r " +
"FROM (SELECT * " +
"FROM jspboard " +dynamicSql(fs, ss)+
"ORDER BY ref DESC, step ASC)A) " +
"WHERE r>="+start+" AND r<="+end+"";
ps=conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
int i=0;
int j=0;
int pageCount=(curPage*10)-10;
while(rs.next()){
if(j>=pageCount && i<10){
SJBoardDTO sjb_dto = new SJBoardDTO();
sjb_dto.setNo(rs.getInt(1));
sjb_dto.setName(rs.getString(2));
sjb_dto.setSubject(rs.getString(3));
sjb_dto.setRegdate(rs.getDate(4));
sjb_dto.setReadnum(rs.getInt(5));
sjb_dto.setStep(rs.getInt(6));
sjb_dto.setRef(rs.getInt(7));
sjb_dto.setJump(rs.getInt(8));
sjb_dto.setValiDel(rs.getString(9));
sjb_dto.setRownum(rs.getInt(10));
boardList.add(sjb_dto);
i++;
}j++;
}
rs.close();
}catch(Exception ex){
System.out.println("게시글 리스트 출력 Exception발생 : "+ex.getMessage());
}finally{
disConnection();
}
return boardList;
}
//게시글 총 갯수
public int getTotalBoardCount(){
int totalBoardCount = 0;
try{
getConnection();
sql = "SELECT COUNT(*) FROM jspBoard";
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
rs.next();
totalBoardCount = rs.getInt(1);
rs.close();
}catch(Exception ex){
System.out.println("게시글 총 갯수 Exception 발생 : "+ex.getMessage());
}finally{
disConnection();
}
return totalBoardCount;
}
}
'Study > 간단 JSP 게시판' 카테고리의 다른 글
[SimpleJspBoard] JSP게시판 만들기 - list.jsp (0) | 2014.05.03 |
---|---|
[SimpleJspBoard] JSP게시판 만들기 - DTO (0) | 2014.05.03 |
[SimpleJspBoard] JSP게시판 만들기 - 프로젝트 디렉토리 구조 (0) | 2014.05.01 |
[SimpleJspBoard] JSP게시판 만들기 - 개발환경 및 DB 테이블 정보 (0) | 2014.05.01 |