8. 회원관리-약관설정,게시판의 개요및 글목록보기
=>페이징 처리
=>agreement.jsp파일 작성(약관설정)
실행결과

=>게시판(모델1)–>모델2->모델2로 게시판
1.MySQL or Maria DB
http://www.mysql.com/
mysql-essential-5.1.45-win32_1.exe
설치->custom으로 설정

경로->C:\MySQL5.1\

환경설정=>Register the MySQL server now체크해제

개발용(Developer Machine)
Manual Setting 체크 ->Concurrent connections(동시접속수)

MySQL->3306(TCP/IP)

사용언어->utf-8로 설정

서비스 등록->MySQL

Include Bin directory in windows PATH->체크(도스모드에서 접속이 가능)
관리자계정(root->1234(암호))

mysql-connector-java-5.1.12-bin->드라이버(MariaDB사용가능)
SQLGateforMySQL–>그래픽툴
SQL->오라클과 동일
도스접속->암호(1234)

1. database(영역)->폴더
mysql> show databases;
+—————————–+
| Database |
+—————————–+
| information_schema |
| mysql |
| test |
+—————————–+
3 rows in set (0.00 sec)
mysql> use mysql->use 들어가고싶은 DB명;
Database changed
mysql> show tables; //테이블리스트 보여달라
+————————————+
| Tables_in_mysql |
+————————————+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+————————————–+
23 rows in set (0.08 sec)
mysql> desc user
+——-+————-+——-+——+———-+———+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——-+——+———-+———+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
+——-+————-+——-+——+———-+———+
mysql> select * from user;
+————–+——-+———————————————————————–+
| Host | User | Password |
| localhost | root | *A4B6157319038724E3560894F7F932C8886EBFCF |
+————–+——-+———————————————————————–+
● 데이터베이스 새로 만들기
1. create database 만들고자하는 DB;
2. drop database 삭제할 DB;
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| test |
| test2 |
+——————————+
4 rows in set (0.00 sec)
mysql> drop database test2;
Query OK, 0 rows affected (0.02 sec)
● JspBoard->프로젝트명
|
-src->자바빈즈->DBConnectionMgr.java
|
-WebContent->
1. mysql 만들기
mysql> create database mydb;
Query OK, 1 row affected (0.02 sec)
mysql> use mydb; //mydb 접속하게 함
Database changed
오라클 – varchar2 ->varchar
number-> int
varchar2(4000)이상->text
date———–>datetime(작성날짜+시간까지 출력)
mysql> create table board(
num int not null primary key auto_increment, /* 글번호를 저장하는 필드 */
writer varchar(10) not null, /*글쓴이 */
email varchar(30), /* 이메일 ->유일하게 null값을 허용 */
subject varchar(50) not null, /*글제목 */
passwd varchar(12) not null, /*글의 비밀번호 */
reg_date datetime not null, /*글을 쓴 날짜 */
readcount int default 0, /* 글의 조회수 */
ref int not null, /* 글을 그룹화하기 위한 필드 */
re_step smallint not null, /* 제목글과 답변글의 순서를 정리*/
re_level smallint not null, /* 글의 레벨을 저장하는 필드 */
content text not null, /* 글내용 */
ip varchar(20) not null /* 글쓴이의 ip주소를 저장하는 필드 */
);
mysql> desc board;
+————–+—————–+——+—–+———-+————————+
| Field | Type | Null | Key| Default| Extra |
+————–+—————–+——+—–+———-+————————+
| num | int(11) | NO | PRI| NULL | auto_increment |
| writer | varchar(10) | NO | | NULL | |
| email | varchar(30)| YES | | NULL | |
| subject | varchar(50) | NO | | NULL | |
| passwd | varchar(12) | NO | | NULL | |
| reg_date | datetime | NO | | NULL | |
| readcount | int(11) | YES | | 0 | |
| ref | int(11) | NO | | NULL | |
| re_step | smallint(6) | NO | | NULL | |
| re_level | smallint(6) | NO | | NULL | |
| content | text | NO | | NULL | |
| ip | varchar(20) | NO | | NULL | |
+————–+—————–+——+—–+———+————————-+
○ BoardDTO.java
예) zipcode만들어서 게시판 보이게 함
mysql> CREATE TABLE zipcode (
zipcode char(7) NOT NULL ,
area1 char(10) NULL ,
area2 char(20) NULL ,
area3 char(40) NULL ,
area4 char(20) NULL
);
Query OK, 0 rows affected (0.12 sec)
mysql> show tables;
+————————+
| Tables_in_mydb |
+————————+
| board |
| zipcode |
+————————+
2 rows in set (0.00 sec)
c:\mysql5.1\bin에 복사(zipcode.txt=>utf-8로 저장해야함)
c:\mysql5.1\bin > mysql -u root -p mydb < zipcode.txt
○ BoardDAO.java
getArticleCount(), getArticles()->arraylist
○ list.jsp
ref->그룹번호
1) 각 게시물을 구분하는 번호로 사용(단독으로 사용할때)
2) 답변다는 위치를 알려주는 그룹번호로 사용
re_level=>신규글과 답변글을 구분하는 인자(x축-들여쓰기)
re_step=>신규들과 답변글사이의 순서를 정해주는 인자
num subject (ref step level)–>답변을 다는 기능
1 aaaa(신규) 0 0 0
|
-aaa-1 0 1 1
|
-aaa-2 0 2 2
|
-aaa-3 0 3 2
2 bbb 1
|
-bbb-1 1
3 cccc 2
|
-ccc-1 2
4 ddd 3
->웹상은 반대로 보여짐
String sql=”select * from board order by ref desc,”;
sql+=” re_step asc limit ?,?”;
->의미: 가장 최근의 글 순서대로 출력하되 답변글순서는 오름차순으로 정렬하라…
● 페이징 처리에 대한 용어 정리
1. record(10개)->page(10)->block(블럭)형성
블럭의 종류
int nowPage = 0;//현재 페이지->웹상에서 마우스로 클릭한 페이지
int nowBlock = 0; //현재 선택된 블럭
Go to Page ::: 1 2 3 4 5 6 7 8 9 10 :::
nowPage
————————한 블럭
1) 이전블럭: – 이전 10개 ::: 11 12 13 14 15 16 17 18 19 20 :::
———– ———————————–
이전블럭 현재블럭
2) 현재블럭 – ::: 1 2 3 4 5 6 7 8 9 10 :::
3) 다음블럭 – ::: 1 2 3 4 5 6 7 8 9 10 ::: 다음 10개
———————– ———
현재블럭 다음블럭
이전 10개 ::: 11 12 13 14 15 16 17 18 19 20 ::: 다음 10개
———– ———————————– ———
이전블럭 현재블럭 다음블럭
int totalRecord -> 총레코드수
int numPerPage = 10;=>한페이지당 보여줄 수 있는 레코드수를 결정
int pagePerBlock = 10;=>블럭당 보여줄 수 있는 페이지수를 결정
총페이지수 =총레코드수/페이지당 보여줄 수 있는 레코드수 122/10=12.2=>13.2=>13
Math.ceil()->무조건 올림메서드
int totalPage =(int)Math.ceil((double)totalRecord / numPerPage);
총블럭 = 총페이지수/블럭당 보여줄수있는 페이지수(13/10)=1.3
int totalBlock =(int)Math.ceil((double)totalPage / pagePerBlock);
int beginPerPage = nowPage * numPerPage;
=>페이지당 보여주는 첫번째 게시물번호=현재페이지*페이지당 보여주는 레코드수
ex)1*10->10 2*10=20
실행결과