위로
아래
글 목록을 불러오기 위한 getArticles() 메소드
기본형은 다음과 같다.
public 반환타입 getArticles(인자) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String sql = "";
conn = DBConnectionManager.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return articles;
}
반환 타입과 인자
하나의 게시글은 여러 파라미터를 가지고 있는 객체다.
글목록은 게시글을 글의 개수만큼 배열로 가지고 있어야 한다.
즉, 글목록은 객체의 배열로 볼 수 있다.
ArrayList를 이용한다.
ArrayList 타입의 articles 변수를 생성하고,
데이터베이스에서 SELECT 문을 통해 조사한 파라미터를 articles에 저장한다.
public List<BoardDTO> getArticles() {
List<BoardDTO> articles = new ArrayList<>();
...
return articles;
}
SQL문
ROWNUM()을 이용해서 정렬해준다.
순서대로 정렬해야하므로 ORDER BY를 쓰기 위해 서브쿼리문으로 작성한다.
순서를 의미하는 bref를 우선순위로 내림차순 정렬하고,
bno와 bstep을 오름차순으로 정렬한다.
String sql = "SELECT ROWNUM AS rn, A.* FROM("
+ "SELECT bno, bref, bstep, blevel, readcount, "
+ "subject, content, writer, regdate, ip, passwd "
+ "FROM board ORDER BY bref DESC bno, bstep) A";
이제 보니 ROWNUM()은 오라클에서만 사용이 가능하다..
MySQL에서 사용할 수 있는 ROW_NUMBER()로 함수를 교체하자.
결과 저장
위의 SQL 문을 통해 조회된 데이터를 DTO 객체 하나에 저장한다.
반복문을 통해 ArrayList에 들은 DTO에 게시글의 개수만큼 객체를 저장한다.
while(rs.next()) {
BoardDTO dto = new BoardDTO();
dto.setBno(rs.getInt("bno"));
dto.setBref(rs.getInt("bref"));
dto.setBstep(rs.getInt("bstep"));
dto.setBlevel(rs.getInt("blevel"));
dto.setReadcount(rs.getInt("readcount"));
dto.setSubject(rs.getString("subject"));
dto.setWriter(rs.getString("writer"));
dto.setRegdate(rs.getString("regdate"));
dto.setIp(rs.getString("ip"));
dto.setPasswd(rs.getString("passwd"));
articles.add(dto);
}
getArticles() 메소드가 완성되었다.
public List<BoardDTO> getArticles() {
List<BoardDTO> articles = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String sql = "SELECT ROWNUM AS rn, A.* FROM("
+ "SELECT bno, bref, bstep, blevel, readcount, "
+ "subject, content, writer, regdate, ip, passwd "
+ "FROM board ORDER BY bref DESC bno, bstep) A";
conn = DBConnectionManager.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
BoardDTO dto = new BoardDTO();
dto.setBno(rs.getInt("bno"));
dto.setBref(rs.getInt("bref"));
dto.setBstep(rs.getInt("bstep"));
dto.setBlevel(rs.getInt("blevel"));
dto.setReadcount(rs.getInt("readcount"));
dto.setSubject(rs.getString("subject"));
dto.setWriter(rs.getString("writer"));
dto.setRegdate(rs.getString("regdate"));
dto.setIp(rs.getString("ip"));
dto.setPasswd(rs.getString("passwd"));
articles.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return articles;
}
전체 코드
더보기
package bean;
import java.sql.*;
import java.util.*;
public class BoardDAO {
private static BoardDAO dao = null;
private BoardDAO () {};
public static BoardDAO getInstance(){
if(dao==null)
dao = new BoardDAO();
return dao;
}
public int BoardWrite (BoardDTO dto) {
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
int r = 0;
conn = DBConnectionManager.getInstance().getConnection();
try {
int newBno = 0;
String sql = "SELECT IFNULL(MAX(bno),0)+1 AS bno FROM board";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next())
newBno = rs.getInt("bno");
pstmt.close();
rs.close();
sql = "INSERT INTO board "
+ "(bno, bref, bstep, blevel, "
+ "subject, content, writer, regdate, "
+ "ip, passwd) "
+ "VALUES(?,?,?,?,?,?,?,SYSDATE(),?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, newBno);
pstmt.setInt(2, newBno);
pstmt.setInt(3, dto.getBstep());
pstmt.setInt(4, dto.getBlevel());
pstmt.setString(5, dto.getSubject());
pstmt.setString(6, dto.getContent());
pstmt.setString(7, dto.getWriter());
pstmt.setString(8, dto.getIp());
pstmt.setString(9, dto.getPasswd());
r = pstmt.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn!=null) conn.close();
if(pstmt!=null) pstmt.close();
if(rs!=null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return r;
}
public List<BoardDTO> getArticles() {
List<BoardDTO> articles = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String sql = "SELECT ROWNUM AS rn, A.* FROM("
+ "SELECT bno, bref, bstep, blevel, readcount, "
+ "subject, content, writer, regdate, ip, passwd "
+ "FROM board ORDER BY bref DESC bno, bstep) A";
conn = DBConnectionManager.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
BoardDTO dto = new BoardDTO();
dto.setBno(rs.getInt("bno"));
dto.setBref(rs.getInt("bref"));
dto.setBstep(rs.getInt("bstep"));
dto.setBlevel(rs.getInt("blevel"));
dto.setReadcount(rs.getInt("readcount"));
dto.setSubject(rs.getString("subject"));
dto.setWriter(rs.getString("writer"));
dto.setRegdate(rs.getString("regdate"));
dto.setIp(rs.getString("ip"));
dto.setPasswd(rs.getString("passwd"));
articles.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return articles;
}
}