반응형
01. MEMBER
1) MEMBER 테이블
CREATE TABLE MEMBER(ID VARCHAR2(20) PRIMARY KEY
,PASSWD VARCHAR2(200) ,NAME VARCHAR2(20) ,EMAIL VARCHAR2(30)
,MOBILE VARCHAR2(20) ,ZIPCODE VARCHAR2(10)
,ADDRESS1 VARCHAR(200), ADDRESS2 VARCHAR(50)
,JOIN_DATE DATE , LAST_LOGIN DATE, STATUS NUMBER(1));
//Table MEMBER이(가) 생성되었습니다.
DESC MEMBER;
2) MemberDTO.java
package xyz.itwill.dto;
/*
이름 널? 유형
---------- -------- -------------
ID NOT NULL VARCHAR2(20) - 아이디
PASSWD VARCHAR2(200) - 비밀번호
NAME VARCHAR2(20) - 이름
EMAIL VARCHAR2(30) - 이메일
MOBILE VARCHAR2(20) - 전화번호
ZIPCODE VARCHAR2(10) - 우편번호
ADDRESS1 VARCHAR2(200) - 기본주소
ADDRESS2 VARCHAR2(50) - 상세주소
JOIN_DATE DATE - 회원가입날짜
LAST_LOGIN DATE - 마지막 로그인 날짜 (6개월간 사용하지 않으면 휴면계정처리)
STATUS NUMBER(1) - 회원상태: 0(탈퇴회원), 1(일반회원), 9(관리자)
*/
public class MemberDTO {
private String id;
private String passwd;
private String name;
private String email;
private String mobile;
private String zipcode;
private String address1;
private String address2;
private String joinDate;
private String lastLogin;
private int status;
public MemberDTO() {
// TODO Auto-generated constructor stub
}
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getPasswd() {return passwd;}
public void setPasswd(String passwd) {this.passwd = passwd;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public String getMobile() {return mobile;}
public void setMobile(String mobile) {this.mobile = mobile;}
public String getZipcode() {return zipcode;}
public void setZipcode(String zipcode) {this.zipcode = zipcode;}
public String getAddress1() {return address1;}
public void setAddress1(String address1) {this.address1 = address1;}
public String getAddress2() {return address2;}
public void setAddress2(String address2) {this.address2 = address2;}
public String getJoinDate() {return joinDate;}
public void setJoinDate(String joinDate) {this.joinDate = joinDate;}
public String getLastLogin() {return lastLogin;}
public void setLastLogin(String lastLogin) {this.lastLogin = lastLogin;}
public int getStatus() {return status;}
public void setStatus(int status) {this.status = status;}
}
02. BOARD
1) BOARD 테이블, board_seq 시퀀스
create table board(num number(4) primary key,id varchar2(20)
,subject varchar2(500),reg_date date,readcount number(4)
,ref number(4),re_step number(4),re_level number(4)
,content varchar2(4000),ip varchar2(20),status number(1));
desc board;
-- 자동증가값을 제공받아 **NUM 컬럼에 저장**하기 위해 시퀀스 생성
-- 즉, **NUM(글번호)**는 사용자에게 입력받는 것이 아닌, 자동증가값으로 저장할 것임
create sequence board_seq;
2) BoardDTO.java
package xyz.itwill.dto;
/*
이름 널? 유형
--------- -------- --------------
NUM NOT NULL NUMBER(4) - 글번호
ID VARCHAR2(20) - 작성자(아이디) - 로그인 사용자만 게시글 작성할 수 있도록 하기 위해
SUBJECT VARCHAR2(500) - 제목
REG_DATE DATE - 작성날짜
READCOUNT NUMBER(4) - 조회수
//다중 답변형 게시판의 답들을 저장하기 위해 아래의 3가지 컬럼 생성 (일반형게시판, 단일답변형 게시판에서 불필요)
//=> 단일이면 1개만 필요 (답변을 저장할 컬럼값 REPLE) , 다중이면 아래의 3가지 다 필요
REF NUMBER(4) - 게시글 그룹 번호 (새글과 답글의 그룹들을 구분하기 위해 사용 - 그룹에 대한 식별자)
RE_STEP NUMBER(4) - 게시글 그룹 내부의 글순서 (답들도 최신답글이 맨 위로 올라갈 수 있도록)
RE_LEVEL NUMBER(4) - 게시글의 깊이 (그룹에 대한 깊이 - 새글이어도 첫번째 답글인지, 답글의 답글인지, 답글의 답글의 답글인지 구분하기 위해서 사용)
CONTENT VARCHAR2(4000) - 내용
IP VARCHAR2(20) - 작성자 컴퓨터의 IP 주소 (IP는 저장하는 것 권장, 하지만 출력하면 안됨)
STATUS NUMBER(1) - 상태 : 0 (삭제글), 1(일반글), 2(비밀글) (다중답변형 게시판은 글 삭제에 문제가 많이 생김 - 회원탈퇴처럼 삭제한다고 실제 DELETE 처리하는 것이 아닌 UPDATE로 상태변경할 것임)
*/
public class BoardDTO {
private int num;
private String id;
//=> JOIN : BOARD테이블 & MEMBER테이블 :JOIN 검색결과를 저장할 수 있는 필드 만드는 것 권장
//=> 왜? JOIN 시 MEMBER 테이블의 NAME 컬럼값 하나만 필요하기 때문에 따로 저장하기
private String writer; //작성자(이름) - MEMBER 테이블의 name 컬럼값을 저장하기 위한 필드
private String subject;
private String regDate;
private int readcount;
private int ref;
private int reStep;
private int reLevel;
private String content;
private String ip;
private int status;
public BoardDTO() {
// TODO Auto-generated constructor stub
}
public int getNum() { return num;}
public void setNum(int num) { this.num = num;}
public String getId() { return id;}
public void setId(String id) { this.id = id;}
public String getWriter() { return writer;}
public void setWriter(String writer) { this.writer = writer;}
public String getSubject() { return subject;}
public void setSubject(String subject) { this.subject = subject; }
public String getRegDate() { return regDate; }
public void setRegDate(String regDate) { this.regDate = regDate; }
public int getReadcount() { return readcount; }
public void setReadcount(int readcount) { this.readcount = readcount; }
public int getRef() { return ref; }
public void setRef(int ref) { this.ref = ref; }
public int getReStep() { return reStep; }
public void setReStep(int reStep) { this.reStep = reStep; }
public int getReLevel() { return reLevel; }
public void setReLevel(int reLevel) { this.reLevel = reLevel; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getIp() { return ip; }
public void setIp(String ip) { this.ip = ip; }
public int getStatus() { return status; }
public void setStatus(int status) { this.status = status; }
}
03. PRODUCT
1) PRODUCT 테이블, product_seq 시퀀스
create table product(num number(4) primary key, category varchar2(50)
, name varchar2(100), image_main varchar2(100)
, image_detail varchar2(100),qty number(8),price number(8));
desc product;
create sequence product_seq;
2) ProductDTO.java
package xyz.itwill.dto;
/*
이름 널? 유형
------------ -------- -------------
NUM NOT NULL NUMBER(4) - 제품번호
=> [제품코드] 사용하는 것 권장
=> 제품코드를 만들면, 제품에 대한 상세정보를 표시할 필요가 없음 (카테고리, 사이즈, 등등..)
CATEGORY VARCHAR2(50) - 카테고리
NAME VARCHAR2(100) - 제품명
IMAGE_MAIN VARCHAR2(100) - 대표이미지
IMAGE_DETAIL VARCHAR2(100) - 상세이미지
QTY NUMBER(8) - 제품수량
=> [재고테이블] 따로 만드는 것 권장 - 입고량, 출고량, 입고일, 출고일..
PRICE NUMBER(8) - 제품가격
*/
public class ProductDTO {
private int num;
private String category;
private String name;
private String imageMain;
private String imageDetail;
private int qty;
private int price;
public ProductDTO() {
// TODO Auto-generated constructor stub
}
public int getNum() { return num; }
public void setNum(int num) { this.num = num; }
public String getCategory() { return category; }
public void setCategory(String category) { this.category = category; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getImageMain() { return imageMain; }
public void setImageMain(String imageMain) { this.imageMain = imageMain; }
public String getImageDetail() { return imageDetail; }
public void setImageDetail(String imageDetail) { this.imageDetail = imageDetail; }
public int getQty() { return qty; }
public void setQty(int qty) { this.qty = qty; }
public int getPrice() { return price; }
public void setPrice(int price) { this.price = price; }
}
04. ZIP
1) 공공데이타 파일 참고 사이트
2) json파일 VS csv파일
json파일
- 실시간 바뀌는 파일
- rest로 받아서 데이타 처리하기
csv파일
- 실시간으로 바뀌지 않는 파일
- 우편번호는 cvs로 많이 받으면 됨
- comma-separated values
- 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일
- 확장자 : csv
- MIME 형식: text/csv
- 예) 교통관리 데이타 : 버스 정보, 현황 등등..
- 예) 지번주소 데이타 : 이용할 예정
3) ZIPCODE 테이블 생성
-- 우편번호 원본파일을 csv 파일(zipcode.csv)로 변환하여 저장 → Excel 이용
-- 원본파일은 `공백(탭)`으로 데이타를 구분하며 csv 파일은 `,`로 데이타를 구분
-- zipcode.sql 파일로 테이블 생성
-- Oracle SQL Developer를 이용하여 zipcode.csv 파일의 내용을 zipcode 테이블에 저장
-- zipcode 테이블을 이용하여 zip 테이블 생성 후 데이타 복사
create table zipcode(zipcode varchar2(40),sido varchar2(46)
,gugun varchar2(40),dong varchar2(40),ri varchar2(45)
,bldg varchar2(70),bunji varchar2(20),seq varchar2(15));
4) zipcode.csv파일 다운 및 데이타 임포트 후 확인
- 우편번호 파일을 csv파일로 다운받기
- 데이타 임포트하기 : 데이타 파일이 가진 행을 하나의 행 씩으로 삽입 처리 가능
select count(*) from zipcode;
--52144
5) ZIP 테이블
--[zipcode테이블]의 필요 부분만 [zip테이블]로 변환해 사용
create table zip(zipcode, dong, address)
as select zipcode,DONG,SIDO||' '||GUGUN||' '||DONG||' '||RI||' '||BLDG||' '||BUNJI
from zipcode;
-- [zipcode 테이블]
desc zipcode;
-- [zip 테이블]
desc zip;
select * from zipcode where dong='역삼동';
select * from zip where dong='역삼동';
select * from zip where dong like '역삼%';
select * from zip where dong like '%삼성%';
-- zipcode 테이블 삭제
drop table zipcode purge;
6) ZIPDTO.java
package xyz.itwill.dto;
/*
이름 널? 유형
------- -- -------------
ZIPCODE VARCHAR2(40)
DONG VARCHAR2(40)
ADDRESS VARCHAR2(266)
*/
public class ZipDTO {
private String zipcode;
private String dong;
private String address;
public ZipDTO() {
// TODO Auto-generated constructor stub
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {this.zipcode = zipcode;}
public String getDong() {return dong;}
public void setDong(String dong) {this.dong = dong;}
public String getAddress() {return address;}
public void setAddress(String address) {this.address = address;}
}
반응형
'jsp' 카테고리의 다른 글
[jsp] 18. 웹사이트 제작법4_Utility제작 (feat. JSP) (0) | 2024.07.13 |
---|---|
[jsp] 17. 웹사이트 제작법3_DAO제작 (feat. JSP) (0) | 2024.07.12 |
[jsp] 15. 웹사이트 제작법1_뼈대제작 (feat. JSP) (0) | 2024.07.11 |
[jsp] 14. 학생정보 관리 프로그램 (0) | 2024.07.11 |
[jsp] 13. useBean 액션태그 미사용 VS useBean 액션태그 사용 예시 (1) | 2024.07.10 |