1. BoardDao 파일
- 총 게시물 수 가져오기
- 게시판 리스트
- 게시물 등록
- 게시물 수정
- 게시물 삭제
- 선택된 게시물에대한 조회
- 게시물 조회시 조회카운트 증가
- 게시물 번호 조회
총 8가지가 구현되어있는 sql.append를 사용하여 쿼리를 날려 db에 전달하는 dao파일이다.
우선 최근에했던 게시물 등록에대한 메소드를 살펴보려한다.
3번 게시물 등록으로 가보자
2. BoardInsert 게시물 등록
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
32
33
34
35
36
37
38
39
40
41
//게시물 등록
public int boardInsert(Board board) {
int count = 0;
Connection conn = null;
PreparedStatement pstmt = null;
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO TBL_BOARD ");
sql.append(" (BBS_SEQ, USER_ID, BBS_NAME, BBS_EMAIL, BBS_PWD, BBS_TITLE, BBS_CONTENT, BBS_READ_CNT, REG_DATE) ");
sql.append("VALUES (?, ?, ?, ?, ?, ?, ?, 0, SYSDATE) ");
try {
int idx = 0;
long bbsSeq = 0;
conn = DBManager.getConnection();
//시퀀스를 통한 게시물번호 조회
bbsSeq = newBbsSeq(conn); //매개변수로 conn객체를 보내기전에 DBManager랑 연결시키고 보내기
board.setBbsSeq(bbsSeq);
pstmt = conn.prepareStatement(sql.toString());
pstmt.setLong(++idx, bbsSeq);
pstmt.setString(++idx, board.getUserId());
pstmt.setString(++idx, board.getBbsName());
pstmt.setString(++idx, board.getBbsEmail());
pstmt.setString(++idx, board.getBbsPwd());
pstmt.setString(++idx, board.getBbsTitle());
pstmt.setString(++idx, board.getBbsContent());
count = pstmt.executeUpdate();
}
catch(SQLException e) {
logger.error("[BoardDao] boardInsert SQLException", e);
}
finally {
DBManager.close(pstmt, conn);
}
return count;
}
첫번째로 봐야할부분은 sql문이 어떻게 구성했나이다.
2-1 SQL문 INSERT문 가공하기
1
2
3
INSERT INTO TBL_BOARD
(BBS_SEQ, USER_ID, BBS_NAME, BBS_EMAIL, BBS_PWD, BBS_TITLE, BBS_CONTENT, BBS_READ_CNT, REG_DATE)
VALUES (?, ?, ?, ?, ?, ?, ?, 0, SYSDATE);
TBL_BOARD의 INSERT문이다. sql.append를 통해서 최종적으로 conn객체에 담아서 db로 연결하는것이다.
2-2 게시물 번호 조회 bbsSeq
그후 삽입할 게시물번호 위치를 가져오기위한 조회를 해야한다. 그전 db연결을 해서 연결된 계정을 conn에 담고
1
2
3
4
5
try
{
conn = DBManager.getConnection(); //그전 db연결을 해서 연결된 계정을 conn에 담고
bbsSeq = newBbsSeq(conn);
}
newBbsSeq 메소드로 가보자
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
//게시물번호 조회(SEQ_BOARD 시퀀스사용)
private long newBbsSeq(Connection conn) {
long bbsSeq = 0;
PreparedStatement pstmt = null;
ResultSet rs = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT SEQ_BOARD.NEXTVAL FROM DUAL ");
try {
pstmt = conn.prepareStatement(sql.toString());
rs = pstmt.executeQuery();
if(rs.next()) {
bbsSeq = rs.getLong(1);
}
}
catch(SQLException e) {
logger.error("[BoardDao] newBbsSeq SQLException", e);
}
finally {
DBManager.close(rs, pstmt);
}
return bbsSeq;
}
sql.append로 해당시퀀스의 다음값을 더해주고
1
2
3
if(rs.next()) {
bbsSeq = rs.getLong(1);
}
결과값이 있다면 , 결과값의 첫번째 즉, 글개수를 bbsSeq에 담아준다
2-3 SQL 문 실행 prepareStatement
1
2
3
sql.append("INSERT INTO TBL_BOARD ");
sql.append(" (BBS_SEQ, USER_ID, BBS_NAME, BBS_EMAIL, BBS_PWD, BBS_TITLE, BBS_CONTENT, BBS_READ_CNT, REG_DATE) ");
sql.append("VALUES (?, ?, ?, ?, ?, ?, ?, 0, SYSDATE) ");
위의 쿼리문에날렸던 값들을 하나씩 ++idx를 하면서 물음표에 값을 넣어준다 이것이 prepareStatement의 사용법이다.
1
2
3
4
5
6
7
8
9
10
11
pstmt = conn.prepareStatement(sql.toString());
pstmt.setLong(++idx, bbsSeq);
pstmt.setString(++idx, board.getUserId());
pstmt.setString(++idx, board.getBbsName());
pstmt.setString(++idx, board.getBbsEmail());
pstmt.setString(++idx, board.getBbsPwd());
pstmt.setString(++idx, board.getBbsTitle());
pstmt.setString(++idx, board.getBbsContent());
count = pstmt.executeUpdate();
그후 execute를 실행해서 update가 성공하면 1을 반환한다. count = 1 저장
2-4 return count
WriteProc 에서 BoardInsert 를 사용하는곳을 가보자
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
Logger logger = LogManager.getLogger("/board/writeProc.jsp");
HttpUtil.requestLogString(request, logger);
String cookieUserId = CookieUtil.getValue(request, "USER_ID");
boolean bSuccess = false;
String errorMsg = "";
String bbsTitle = HttpUtil.get(request, "bbsTitle", "");
String bbsContent = HttpUtil.get(request, "bbsTitle", "");
if(!StringUtil.isEmpty(bbsTitle) && !StringUtil.isEmpty(bbsContent)) {
BoardDao boardDao = new BoardDao();
Board board = new Board();
board.setUserId(cookieUserId);
board.setBbsTitle(bbsTitle);
board.setBbsContent(bbsContent);
if(boardDao.boardInsert(board) > 0) {
bSuccess = true;
}
else {
errorMsg = "게시물 등록중 오류가 발생했습니다.";
}
}
else {
errorMsg = "게시물 입력 값이 올바르지 않습니다.";
}
자바부분만 보여줬다. 글작성하는 부분인데
1
2
3
if(boardDao.boardInsert(board) > 0) {
bSuccess = true;
}
이부분처럼 Insert에서 값이 1 , 즉 성공했다면 bSuccess가 true가 되서
게시물등록이 성공되었습니다 알림창이되고 그다음 list 로 가는 로직이된다.
3. 게시물에대한 조회
헬로우~