티스토리 뷰
자 두번째 시간입니다..
한번에 다 올리고 싶은 욕망도 있었으나.. 한달에 글 60개 쓰려면.. 이것도 나눠써야하는 처지라;..
내가 왜 한달에 글 60개 쓰기로 약속했는지;..
이런 간단한 약속 하나 못 지키면 다른것도 다 못할것 같기에.. 최대한 약속은 지키려고 노력하고 있어서 그렇습니다;..
이해해주세요;..
자 저장하는것 까지는 끝냈고.. 이제 리스트에 표시 글 내용 보기를 해봅시다..
리스트 파일에 추가를 해줍니다..
notice_list.jsp..
<%@ page language="java" import="java.sql.*,java.util.*,java.io.*,util.*" contentType="text/html;charset=euc-kr" %>
<%!
// 오라클 커넥션을 위한 메소드
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
{
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL"; // 오라클 @ 주소:포트:오라클호스트
String username = "study";
String userpass = "study";
Class.forName( "oracle.jdbc.driver.OracleDriver" );
Connection conn = DriverManager.getConnection( url, username, userpass );
return conn;
}
%>
<html>
<head>
<title>공지사항</title>
</head>
<body>
<iframe name='action' width="0" height="0" frameborder="0" scrolling='yes'></iframe>
<table>
<tr>
<td><a href="/notice/notice_add.jsp"><img src="이미지주소" border="0" alt="등록"></a></td>
</tr>
</table>
<!-- 추가 부분 -->
<table>
<tr>
<td>번호</td>
<td>제목</td>
<td>아이디</td>
<td>등록일자</td>
</tr>
<%
Connection conn = DB_Connection();
Statement stmt = null;
ResultSet rs = null;
StringBuffer query = null;
StringBuffer where = null;
String totalCount = "";
String link = "";
String user_id = "";
String subject = "";
String contents = "";
int page_no = 20;
try {
stmt = conn.createStatement();
query = new StringBuffer();
where = new StringBuffer();
query.setLength(0);
query.append("SELECT COUNT(SEQ) TOTAL FROM NOTICE ") // DB에 저장된 글의 갯수를 가지고 옵니다..
.append("WHERE SEQ IS NOT NULL \n");
query.append(where);
rs = stmt.executeQuery(query.toString());
if (rs.next()) {
totalCount = rs.getString("totalCount ");
}
rs.close();
if (totalCount.equals("0")) { // total 값이 0 이면 공지사항 글이 없는것이기 때문에 공지사항 없음 출력
%>
<tr>
<td>공지사항 없음</td>
</tr>
<%
} else {
query.setLength(0);
query.append("SELECT SEQ, SUBJECT, USER_ID, REG_DATE1, RNUM ")
.append("FROM ( ")
.append(" SELECT SEQ, SUBJECT, USER_ID, REG_DATE1, ROWNUM RNUM ")
.append(" FROM ( ")
.append(" SELECT SEQ, SUBJECT, USER_ID, TO_CHAR(REG_DATE, 'YYYY-MM-DD') REG_DATE1 ")
.append(" FROM NOTICE ")
.append(" ORDER BY REG_DATE DESC ")
.append(" ) ")
.append(" ) ")
.append("WHERE RNUM BETWEEN 1 AND 100");
rs = stmt.executeQuery(query.toString());
for (int i = 0; rs.next(); i++) {
%>
<tr>
<td><%=i+1 %></td>
<td><a href="/notice/notice_view.jsp?seq=<%=rs.getString("SEQ") %>"><%=rs.getString("SUBJECT") %></a></td>
<td><%=rs.getString("USER_ID") %></td>
<td><%=rs.getString("REG_DATE1") %></td>
</tr>
<%
}
}
} catch( Exception e ) {
out.println( e.toString() );
}
%>
</table>
원래 이런식으로 쿼리를 작성해야.. 글이 많아졌을때 페이지 넘김이 잘되는데..
SELECT SUBJECT, USER_ID, REG_DATE, RNUM
FROM (
SELECT SUBJECT, USER_ID, REG_DATE, ROWNUM RNUM
FROM (
SELECT SUBJECT, USER_ID, TO_CHAR(REG_DATE, 'YYYY-MM-DD') REG_DATE1
FROM NOTICE
ORDER BY REG_DATE DESC
)
)
WHERE RNUM BETWEEN 1 AND 100
이건 나중에 js, java 파일 써서 하는 방법을 소개해 드리겠습니다..
그냥 우선 간단하게 소개해드리면..
스트링 선언부터하고..
String page_num = request.getParameter("page_num");
String pages = request.getParameter("pages");
이런식으로 java 파일을 작성해서..
public static int pagingStatus(String totalCount, int page_no, String pageNum, String Mode){
int page_num = 1;
if(!pageNum.equals("")) page_num = Integer.parseInt(pageNum); //페이지 번호..
int link_no=5; //하단 링크[1][2]의 갯수..
int total = Integer.parseInt(totalCount); //전체 게시물수..
int half_page=((total-1)/page_no)+1; //전체 페이지를 글수대로 나눈 값 = 전체 페이지수..
if(page_num > half_page) page_num = half_page; //페이지수가 전체페이지수를 넘어서면 마지막페이지로 지정..
int f_article = (page_num-1) * page_no + 1; //현재 페이지가 몇번째 글인지 알아냄..
if( page_no > total) page_no = total;
int e_article = f_article + page_no - 1; //현재 페이지의 마지막 글 번호를 구함..
int f_link = ((page_num-1)/link_no+1)*link_no-(link_no-1); //하단 링크[1][2]의 시작 값을 구함..
int l_link = f_link+(link_no-1); //하단 링크[1][2]의 마지막 값을 구함..
if( l_link> half_page) l_link= half_page;
int prev = f_link-1;
int next = l_link+1;
int back = page_num-1;
int forward = page_num+1;
if(Mode.equals("page_no")) return page_no;
if(Mode.equals("f_article")) return f_article;
if(Mode.equals("e_article")) return e_article;
return 0;
}
이런식으로 사용하는 방법을 소개해드리겠습니다..
WHERE RNUM BETWEEN "+pagingStatus(totalCount, page_no, page_num, "f_article")+" AND "+pagingStatus(totalCount, page_no, page_num, "e_article")+"
그럼 전에 게시판 만들기에서 썼던것 처럼..
<%
if( ( total_cnt % list_num ) == 0 )
t_page = total_cnt / list_num;
else
t_page = ( total_cnt / list_num ) + 1;
int block_num = 5;
int t_block = t_page / block_num;
if( t_page % block_num != 0 )
t_block++;
int c_block = c_page / block_num;
if( c_page % block_num != 0 )
c_block++;
%>
</table>
<table cellspacing=1 width=600 border=1>
<tr><td>
<%
for( int i=(c_block-1)*block_num+1; i<=c_block*block_num && i<=t_page; i++ )
{
%>
<a href="board_list.jsp?str_c_page=<%=i%>">
<%
if( c_page == i )
out.print( "<b>" );
%>
[<%=i%>]
<%
if( c_page == i )
out.print( "</b>" );
%>
<%
}
%>
쓸때마다 이렇게 안써도 되겠죠..
우선 저 방법은 나중에 소개시켜드리겠습니다; 안바쁠때;.. 정 페이지 넘김을 추가하고 싶다면..
게시판 만들기에 있는 소스 쓰세요;..
그리고 글 번호도 순서대로 아래서부터 1,2,3,4 로 증가해야하지만..
이것도 위에 방법처럼 하면 간단한데.. 나중에 소개해드리기로 했으니까;.. 그냥 예전소스 있는것 쓰시면 됩니다;..
이렇게 그냥 대충 하게 되면.. 요렇게 나옵니다.. 앗.. 링크 추가한게 빠진게 찍혔군요;.. 다시;..
자 이제 리스트도 대충 꾸며졌구요;.. 뭐 대충 된것 같습니다..
이제 글 내용 보기를 해봅시다.. 뭔가 이상한 내용들이 많아지면.. 링크값 넘길때 복잡한데..
최대한 간단하게 작성하기로 한거라 시퀀스 값을 넘긴것을 받아 검색!.. 해서 notice_view 에 뿌려줍니다..
notice_view.jsp..
<%@ page language="java" import="java.sql.*,java.util.*,java.io.*,util.*" contentType="text/html;charset=euc-kr" %>
<%!
// 오라클 커넥션을 위한 메소드
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
{
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL"; // 오라클 @ 주소:포트:오라클호스트
String username = "study";
String userpass = "study";
Class.forName( "oracle.jdbc.driver.OracleDriver" );
Connection conn = DriverManager.getConnection( url, username, userpass );
return conn;
}
%>
<html>
<head>
<title>게시판</title>
</head>
<body>
<iframe name='action' width="0" height="0" frameborder="0" scrolling='yes'></iframe>
<table>
<tr>
<td>
<table>
<tr>
<td>공지사항 내용</td>
</tr>
</table>
<%
Connection conn = DB_Connection();
Statement stmt = null;
ResultSet rs = null;
StringBuffer query = null;
String seq = request.getParameter("seq");
try
{
stmt = conn.createStatement();
query = new StringBuffer();
query.setLength(0);
query.append("SELECT SEQ, SUBJECT, USER_ID, CONTENTS ")
.append("FROM NOTICE WHERE SEQ = '"+seq+"' ");
rs = stmt.executeQuery(query.toString());
if (rs.next()) {
%>
<table>
<tr>
<td>아이디</td>
<td><input name="user_id" size="50" maxlength="50" value="<%=rs.getString("USER_ID") %>"></td>
</tr>
<tr>
<td>제목</td>
<td><input name="subject" size="50" maxlength="100" value="<%=rs.getString("SUBJECT") %>"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea name="contents" cols="50" rows="13"><%=rs.getString("CONTENTS") %></textarea></td>
</tr>
</table>
<table>
<tr>
<td><a href="/notice/notice_list.jsp"><img src="이미지주소" border="0" alt="확인"></a></td>
</tr>
</table>
<%
}
} catch( Exception e ) {
out.println( e.toString() );
}
%>
</td>
</tr>
</table>
</body>
</html>
이렇게 하면 글 제목, 아이디, 내용이 보여야 하는데..
글 내용이 null 이 나옵니다..
안되면 수정해야죠!..
try
{
stmt = conn.createStatement();
query = new StringBuffer();
query.setLength(0);
query.append("SELECT SEQ, SUBJECT, USER_ID, CONTENTS ")
.append("FROM NOTICE WHERE SEQ = '"+seq+"' ");
rs = stmt.executeQuery(query.toString());
if (rs.next()) {
// 추가 부분
StringBuffer output = new StringBuffer();
Reader input = rs.getCharacterStream("contents");
char[] buffer = new char[1024];
int byteRead;
while((byteRead=input.read(buffer,0,1024))!=-1){
output.append(buffer,0,byteRead);
}
String contents = output.toString();
%>
그리고 내용을 출력해주는곳을 아래와 같이 변경합니다..
<tr>
<td>내용</td>
<td><textarea name="contents" cols="50" rows="13"><%=contents %></textarea></td>
</tr>
</table>
이제 잘 나오네요..
오늘의 소스를 올려드리겠습니다..
글 삭제, 수정 부분은 안해줘도 되겠죠?.. 그건 쉽잖아요..
글 삭제, 수정 부분까지 올렸다면 글 3개는 쓸 수 있는데.. 제가 좀 귀찮군요;..
삭제, 수정부분은 기존의 게시판 만들기 소스도로 간단하기 때문에 아마 쉽게 하실 수 있을겁니다..
내용은 2일치이지만.. 테이블 만들고 코딩하고 글 2개 올리는데 대충 3시간 정도 걸린것 같네요..
스샷 찍고 코딩 올리고 주석달고 하는게 너무 힘들어요;..
지금까지 했던 공지사항을 멋지게 꾸민다면.. 아래처럼 나오겠죠..
수정이랑 삭제 버튼은 아직 이미지를 안만들어서 엑박표시 ㅎㅎ;..
이메일 보내기를 빨리 끝내야 다른걸 올릴텐데 말이죠;.. 이게 생각보다 끈질기게 오래 달라 붙어서 힘드네요;..
- Total
- Today
- Yesterday
- NDS
- C/C++
- Spore
- 야생의 숨결
- oracle
- 동물의숲
- jsp
- Wii GAME
- 군대이야기
- 2011사진공모전
- NDSi
- 티스토리달력2011
- 게시판
- Project Diet
- 웃기는 사진
- 스포어
- 동유럽
- 슈퍼마리오 RPG
- Free Coupon
- 오라클
- 겨울
- CNN Student News
- 젤다의 전설
- 3분 영어 위클리
- 티스토리달력2010
- NDS GAME LIST
- DLC
- ndsl
- 아이폰
- 가을
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |