package db.ex4_1;
import java.util.List;
import java.util.Scanner;
//메인클래스
~
!
//web에서는 불필요한 부분
public class Main {
public static void main(String[] args) {
NoticeBoardDAO ntBoardDAO = new NoticeBoardDAO();//DAO객체 생성
Scanner sc = new Scanner(System.in);
while(true){
System.out.println();
System.out.println();
System.out.println("----------------------------------------------------");
System.out.println("| 1.목록조회 | 2.상세조회 | 3.등록 | 4.수정 | 5.삭제 | 6.종료 |");
System.out.println("----------------------------------------------------");
System.out.print("위 리스트 중에 원하는 메뉴번호를 입력하세요. : ");
int num = sc.nextInt(); //Scans the next token of the in
if(num==1) {//1. 목록조회
//타입 변수명 = ntBoardDAO.getNoticeList();
List<NoticeBoardDTO> ntDTOList = ntBoardDAO.getNoticeList();
System.out.println("ntDTOList = "+ntDTOList); //오버라이딩 된 값 출력
System.out.println("총 게시글수 : "+ntDTOList.size()); //주소
// NoticeBoardDTO test1 = ntDTOList.get(1); //--> 개인테스트
// System.out.println(test1);
for(int i=0; i<ntDTOList.size();i++) {
//여튼 셋다 먹는다.
System.out.println(ntDTOList.get(i)); //toString 재정의하면 얘가 왜먹지?
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println(ntDTOList.toString());//toString 재정의하면 얘가 왜먹지?
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println(ntDTOList);//toString 재정의하면 얘가 왜먹지?
// System.out.println("----------------------------------------");
// System.out.printf("| %5d | %5s | %5s | %5s | \r\n----------------------------------------\r\n", nbno, title, cre_date, writer);
}
}else if(num==2) {//2. 상세조회
System.out.print("조회할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
//매개변수에 NoticeBoardDTO클래스의 객체주소를 넘겨준다.
NoticeBoardDTO nbDTO = new NoticeBoardDTO(nbno); //매개변수의 주소를 넘기기 위한것
// ntBoardDAO.getNotice(nbDTO);
//리턴유형이 NoticeBoardDTO클래스인 getNotice()호출
NoticeBoardDTO resultNTDTO = ntBoardDAO.getNotice(nbDTO); //리턴유형을 담기위한 결과물 즉 리턴되어지는 값을 받기 위해서 선언하는것.
//콘솔에 리턴받은 NoticeBoardDTO 객체내용을 출력
System.out.println("리턴받은 NoticeBoardDTO = "+resultNTDTO); //주소
System.out.println("리턴받은 NoticeBoardDTO = "+resultNTDTO.getNbno()); //리턴받은 주소값에서 마음대로 데이타값을 추출해서 본다.
// "select nbno, title, centent, cre_date, writer, rcnt, empno "
// System.out.printf("| %5d | %5s | %5s | %5s | %5s | %5d | %5d | \r\n------------------------------------------------------------------\r\n", no, title, centent, cre_date, writer, rcnt, empno);
// System.out.println("--아래는 특정글번호의 상세내용이 컬럼별 한줄로 출력");
// System.out.println("--nbno컬럼값:"+resultNTDTO.getNbno());
// System.out.println("--title컬럼값:"+resultNTDTO.getTitle());
// System.out.println("--centent컬럼값:"+resultNTDTO.getCentent());
// System.out.println("--cre_date컬럼값:"+resultNTDTO.getCre_date());
// System.out.println("--writer컬럼값:"+resultNTDTO.getWriter());
// System.out.println("--rcnt컬럼값:"+resultNTDTO.getRcnt());
// System.out.println("--empno컬럼값:"+resultNTDTO.getEmpno());
// System.out.println("---------------------------------");
System.out.println("------------------------------------------------------------------");
System.out.printf("| %5d | %5s | %5s | %5s | %5s | %5d | %5d | \r\n------------------------------------------------------------------\r\n",
resultNTDTO.getNbno(), resultNTDTO.getTitle(), resultNTDTO.getCentent(), resultNTDTO.getCre_date(), resultNTDTO.getWriter(), resultNTDTO.getRcnt(), resultNTDTO.getEmpno());
}else if(num==3) {//3. 등록
System.out.println("등록정보를 입력하세요.");
System.out.println("제목 : ");
String title = sc.next();
System.out.println("내용 : ");
String centent = sc.next();
System.out.println("작성자 : ");
String writer = sc.next();
// ntBoardDAO.addNotice(title, centent, writer);
// boolean insertResult = ntBoardDAO.addNotice(title, centent, writer); //리턴타입이 있는 형태의 메소드로 변경해줄수 있다 !! boolean
// System.out.println("insertResult = "+insertResult);
//NoticeBoardDTO타입의 객체를 생성해서 제시하자
NoticeBoardDTO nbDTOobj= new NoticeBoardDTO();
//user로부터 입력받은 제목, 내용 작성자를
//NoticeBoardDTO의 Setter를 호출하여 설정한 후
nbDTOobj.setTitle(title);
nbDTOobj.setCentent(centent);
nbDTOobj.setWriter(writer);
//매개변수가 없는 기본 생성자를 사용하였기 때문에 기본적으로 DTO에 있는 필드값들은 null로 초기화 되었고 title은 Not null 값이기 때문에 에러가 난다.
//그래서 메인에서 입력받은 값을 setter로 받아서 처리해야한다.
//ntBoardDAO.addnotice()를 호출하면서 넘기자
boolean insertResult = ntBoardDAO.addNotice(nbDTOobj);
System.out.println("updateNotice() 실행결과 = "+insertResult);
}else if(num==4) {//4. 수정
System.out.println("수정할 정보를 입력하세요.");
System.out.println("수정할 글번호 : ");
int nbno = sc.nextInt();
System.out.println("제목 : ");
String title = sc.next();
System.out.println("내용 : ");
String centent = sc.next();
System.out.println("작성자 : ");
String writer = sc.next();
//외부에서 클래스명 참조변수 = new 클래스명();
NoticeBoardDTO nbDTOobj= new NoticeBoardDTO();
//필드값을 설정해서 ntBoardDAO의 updateNotice()호출시 넘긴다.
nbDTOobj.setTitle(title);
nbDTOobj.setCentent(centent);
nbDTOobj.setWriter(writer);
nbDTOobj.setNbno(nbno);
int resultRowCnt = ntBoardDAO.updateNotice(nbDTOobj);
//업데이트 성공하면 true리턴 , 업데이트 실패하면 false리턴
System.out.println("resultRowCnt = "+resultRowCnt);
}else if(num==5) {//5. 삭제
System.out.print("삭제할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
//delNotice() 호출시 NoticeBoardDTO클래스 타입의 객체주소를 넘겨야한다.
//객체생성 클래스명 참조변수=new 클래스명(int 글번호);
//객체생성 NoticeBoardDTO 참조변수 = new NoticeBoardDTO(nbno);
NoticeBoardDTO nbDTO = new NoticeBoardDTO(nbno);
int resultRowCnt = ntBoardDAO.delNotice(nbDTO);
// int resultRowCnt = ntBoardDAO.delNotice(nbno);
System.out.println("resultRowCnt = "+resultRowCnt);
}else if(num==6) {//6. 종료
break; //반복문 while 종료
}else {
System.out.println("기타-잘못된 번호");
}
}//while 문 종료6
System.out.println("종료합니다.!!!");
//db연결테스트
// Connection conn = JdbcUtil.getConnection();
// 클래스명 참조변수 = new 클래스명();
// 참조변수.메소드();
//전체목록 조회
// JdbcUtil.close(conn);
}
}
package db.ex4_1;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//DAO:Data Access Object. db 연동
//DAO란 DB연동하여 DB작업을 제공하는 클래스이다.
//이 클래스는 Board관련 DB작업을 제공하는 클래스이다.
//이 클래스에서는 매개변수로 NoticeBoardDTO를 사용+
// 리턴유형을 NoticeBoardDTO로 지정
public class NoticeBoardDAO {
//field
//constructor
//method
//1.목록조회 --> public 게시글목록 getNoticeList() {
//리턴유형이 NoticeBoardDTO클래스로 구성된 List
public List<NoticeBoardDTO> getNoticeList() {
System.out.println("getNoticeList()진입");
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
String sql = "select nbno, title, centent, cre_date, writer, rcnt, empno " +
"from notice " +
"order by nbno desc";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//인터페이스 타입 참조변수명 = new 구현클래스명();
List<NoticeBoardDTO> list = new ArrayList();
//클래스명 타입 참조변수명 = new 클래스명();
//ArrayList<NoticeBoardDTO> list = new ArrayList();
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("try{}블럭안~~~");
//4.실행
/*rs.get데이터타입(select순서)
rs.get데이터타입("컬럼명")*/
System.out.println("4. getNoticeList() 실행");
while(rs.next()) {
System.out.println();
System.out.println();
int nbno = rs.getInt(1);
String title = rs.getString(2);
String centent = rs.getString(3);
Date cre_date = rs.getDate(4);
String writer = rs.getString(5);
int rcnt = rs.getInt(6);
int empno = rs.getInt(7);
//방법1. 기본생성자를 이용하여 객체를 생성하는경우 (객체를 매번 반복문안에서 생성해야한다. 밖에서 생성하면 다른객체에 들어간다?)
NoticeBoardDTO nbdto=new NoticeBoardDTO(); //기본생성자 이용시 setter메소드 이용필요 setter안쓰면 나머지 setter메소드 안쓴 필드값은 자동초기화
nbdto.setNbno(nbno);
nbdto.setTitle(title);
nbdto.setCentent(centent);
nbdto.setCre_date(cre_date);
nbdto.setWriter(writer);
nbdto.setRcnt(rcnt);
nbdto.setEmpno(empno);
//완성된 공지사항 게시판의 객체를 List에 추가한다.
list.add(nbdto);
// System.out.println("안녕"+list.get(1)); //--->개인테스트 nbdto 하나 들어가 있기 떄문에 인덱스 값이 0만된다. 1부터는 안됨 에러난다.
//바로 꺼내서 못쓰는데 이걸 list에 담아서 리턴하면 main에서 반복문이나 프린트문으로 인덱스 써서 출력가능??왜?
//--->와일문 안이라 그런것 처음돌때 인덱스 0 밖에 안들어가 있는데 1찍으면 되겠냐?????????????????????????????
// System.out.println("----------------------------------------");
// System.out.printf("| %5d | %5s | %5s | %5s | \r\n----------------------------------------\r\n", nbno, title, cre_date, writer);
// System.out.println(" ");//줄바꿈
}//while문 끝
//System.out.println("4.쿼리실행결과 리턴받은 row수="+resultCnt);
// System.out.println("안녕"+list.get(1));
} catch (SQLException e) {
System.out.println("catch{}블럭안
~
");
e.printStackTrace();
}finally {
System.out.println("Exception 발생 상관없이 무조건 실행되는 finally블럭입니다.");
//5.반납-->exception 발생하지 않아도, 또는
//exception 발생하여 catch절에 들어갔어도
//finally절은 무조건 반드시 거쳐가야한다.
//반드시 실행해야하는 코드가 있다면 finally블럭을 이용
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}
// System.out.println("안녕"+list.get(1));
return list;
}//getNoticeList() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//2.상세조회 -->public 게시글 getNotice(매개변수리스트) {
//리턴유형이 NoticeBoardDTO클래스
// public void getNotice(NoticeBoardDTO nbDTO) {//int nbno는 글번호
public NoticeBoardDTO getNotice(NoticeBoardDTO nbDTO) {//int nbno는 글번호
System.out.println("getNotice()진입 nbno="+nbDTO); //주소찍힌다.
System.out.println("getNotice()진입 nbno="+nbDTO.getNbno());
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
NoticeBoardDTO ntDTOobj = null;
//select결과로 받은 컬럼의 값들을 NoticeBoardDTO()객체로 만들기 위해 선언한 변수 및 초기화
String sql = "select nbno, title, centent, cre_date, writer, rcnt, empno " +
"from notice " +
"where nbno = ?";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
//매개변수 nbDTO에는 NoticeBoardDTO 클래스의 객체주소가 저장되어있다.
//nbDTO.getNbno():저장된 주소를 통해 getNono()메소드를 호출한다.
/*pstmt.setInt(1, nbDTO.getNbno()):호출된 int타입의 값을 여기에서는 글번호를 가져와 1번째 ?의값으로 설정한다.*/
pstmt.setInt(1, nbDTO.getNbno());
rs = pstmt.executeQuery(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
//4.실행
System.out.println("4. getNoticeList() 실행");
if(rs.next()) {//select 결과로 record가 존재할 경우
int no = rs.getInt(1);
String title = rs.getString(2);
String centent = rs.getString(3);
Date cre_date = rs.getDate(4);
String writer = rs.getString(5);
int rcnt = rs.getInt(6);
int empno = rs.getInt(7);
ntDTOobj = new NoticeBoardDTO(no, title, centent, cre_date, writer, rcnt, empno);
//이제 리턴유형을 NoticeBoardDTO로 선언하고 그 값을 객체로 만들었으니 메인에서 뿌리면 되서 아래 프린트문은 필요없다!!
// System.out.println("------------------------------------------------------------------");
// System.out.printf("| %5d | %5s | %5s | %5s | %5s | %5d | %5d | \r\n------------------------------------------------------------------\r\n", no, title, centent, cre_date, writer, rcnt, empno);
// System.out.println(" ");//줄바꿈
}else {//select 결과로 record가 존재하지않을 경우
System.out.println("조회한 글번호"+nbDTO.getNbno()+"에 해당하는 글이 존재하지 않아요");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
return ntDTOobj;
}//getNotice() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//3.등록 - title 제목, centent 내용, 작성자명 writer
//리턴값 - 입력성공시 true, 실패시 false
//매개변수 - NoticeBoardDTO ntDTO에는 주소가 저장되면주소가 출력되고
//주소가 저장되어있지 않으면 NULL이 출력된다.
public boolean addNotice(NoticeBoardDTO ntDTO) {
// public boolean addNotice(String title, String centent, String writer) {
// System.out.printf("addNotice()진입 title:%s, centent:%s, writer:%s\r\n", title, centent, writer);
//주소가 저장되어있지 않으면 NULL출력
System.out.println("addNotice() ntdTO = "+ntDTO);//주소출력
System.out.printf("addNotice()진입 title:%s, centent:%s, writer:%s\r\n",
ntDTO.getTitle(), ntDTO.getCentent(), ntDTO.getWriter());
PreparedStatement pstmt = null;
Connection conn = null;
// ResultSet rs = null;
boolean result = false;
String sql = "insert into notice(nbno, title, centent, cre_date, writer, rcnt, empno) " +
"values(notice_seq.nextval, ?, ?, SYSDATE, ?, 0,7900)";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비 & 4.실행
System.out.println("3. addNotice() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, ntDTO.getTitle());
pstmt.setString(2, ntDTO.getCentent());
pstmt.setString(3, ntDTO.getWriter());
int resultcnt = pstmt.executeUpdate(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
System.out.println("리턴되는 행수");
if(resultcnt==1) {
System.out.println("입력성공");
result=true;
}else {
System.out.println("입력실패");
result=false;
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. addNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
return result;
}
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//4.수정 - 글번호 nbno, title 제목, centent 내용, 작성자명 writer
// public int updateNotice(int nbno, String title, String centent, String writer) {
//매개변수 ntDTO에는 NoticeBoardDTO의 주소 또는 NULL저장
public int updateNotice(NoticeBoardDTO ntDTO) {
// System.out.printf("updateNotice()진입 nbno:%d, title:%s, centent:%s, writer:%s\r\n", nbno, title, centent, writer);
//주소가 저장되어있지 않으면 NULL출력
System.out.println("updateNotice() ntDTO = "+ntDTO);//주소출력
System.out.printf("updateNotice()진입 nbno:%d, title:%s, centent:%s, writer:%s\r\n",
ntDTO.getNbno(), ntDTO.getTitle(), ntDTO.getCentent(), ntDTO.getWriter());
PreparedStatement pstmt = null;
Connection conn = null;
int resultcnt = 0;
// ResultSet rs = null;
String sql = "update notice set title=?, centent=?, writer=? " +
"where nbno=?";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비 & 4.실행
System.out.println("3. updateNotice() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, ntDTO.getTitle());
pstmt.setString(2, ntDTO.getCentent());
pstmt.setString(3, ntDTO.getWriter());
pstmt.setInt(4, ntDTO.getNbno());
resultcnt = pstmt.executeUpdate(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
if(resultcnt>=1) {
System.out.println("수정성공");
}else {
System.out.println("수정실패");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. updateNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
return resultcnt;
}
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//5.삭제 - nbno 글번호
/*리턴유형 int - delete 실행시 리턴되는 행수*/
public int delNotice(NoticeBoardDTO ntDTO) {
//public int delNotice(int nbno) {
//참조변수 ntDTO에는 주소가 저장되었다.
System.out.println("delNotice()진입 참조변수ntDTO="+ntDTO); //주소출력
System.out.println("delNotice()진입 참조변수ntDTO="+ntDTO.getNbno()); //글번호 출력
// System.out.println("delNotice()진입 nbno="+nbno);
PreparedStatement pstmt = null;
Connection conn = null;
int resultcnt = 0;//delete실행시 리턴되는 행수를 저장하기위한변수선언 및 초기화
// ResultSet rs = null;
String sql = "delete from notice where nbno=?";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비 & 4.실행
System.out.println("3. delNotice() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, ntDTO.getNbno()); //1번째 ?에 글번호
resultcnt = pstmt.executeUpdate();
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
//여기에서는 삭제성공하면 1리턴
//여기에서는 삭제실패하면 0리턴
if(resultcnt>=1) {
System.out.println("삭제성공");
}else {
System.out.println("삭제실패");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. delNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
return resultcnt;
}
}
package db.ex4_1;
import java.util.Date;
/*
- DTO(Data Transfer Object)
- 순수하게 데이터를 담아 계층 간으로 전달하는 객체이다.
- 로직을 갖고 있지 않은 순수한 데이터 객체이며 메서드로는 getter/setter 만을 갖는다.
- 여기서 getter/setter 이외에 다른 로직이 필요 없는 이유를 좀 더 자세히 살펴보자면,
만약 DTO가 데이터 전달 만을 위한 객체라고 한다면
완전히 데이터 '전달' 용도로만 사용하기 때문에
getter/setter로직만이 필요하지 다른 로직이 필요하지 않은 것이다.
- */
//이 클래스는 DB의 noticeBoard테이블의 데이터를 저장, 제공하는 역할을 하는 DTO클래스이다.
public class NoticeBoardDTO {
//field : 변수 초기화 및 전역변수 설정, 데이터 저장
//[접제][제] 데이터타입 필드명[=초기값]
//초기값을 생략하면 데이터타입별로 자동초기화 된다.
//(정수 = 0, 실수 = 0.0, boolean = false, char = 공백
//-->프리미티브타입
//배열,클래스, : null(힙영역안에 참조주소가 있는 타입)
//--> 레퍼런스타입
private int nbno = 0; //글번호
private String title = null; //제목
private String centent = null; //내용
private Date cre_date = null; //작성일
private String writer = null; //작성자
private int rcnt = 0; //조회수
private int empno = 0; //사원번호(여기에서는 공지사항게시판을 관리하는 사원번호)
//constructor
//[접제][제] 클래스명 (매개변수){}
//외부에서 클래스명 참조변수 = new 클래스명();
public NoticeBoardDTO(){}//default constructor
//외부에서 클래스명 참조변수 = new 클래스명(글번호);
public NoticeBoardDTO(int nbno){
this.nbno = nbno;
}
//외부에서 클래스명 참조변수 = new 클래스명(글번호, ~,~,~,~,~, 사번){};
public NoticeBoardDTO(int nbno, String title, String centent, Date cre_date, String writer, int rcnt, int empno){
this.nbno = nbno;
this.title = title;
this.centent = centent;
this.cre_date = cre_date;
this.writer = writer;
this.rcnt = rcnt;
this.empno = empno;
}
//getter setter는 ch07챕터에 machine01 클래스나 student01 클래스에 사용했던 방법이 잘 나와있다 .
//생성자 이용해서 초기에 객체 생성시에 입력값을 세팅할 수도 있으나 getter setter의 메소드를 미리 선언해서 사용하면 그 이후에 값을 세팅하고 불러올 수 있다.
//여기에서 필드 데이터를 하나하나 선언해서 메소드화하여 사용할 수도 있고 getinfo, setinfo 와 같이 한번에 세팅하고 한번에 불러올수있도록 메소드를 만들 수도 있다.
//getter!!!
public int getNbno() {
return nbno;
}
public String getTitle() {
return title;
}
public String getCentent() {
return centent;
}
public Date getCre_date() {
return cre_date;
}
public String getWriter() {
return writer;
}
public int getRcnt() {
return rcnt;
}
public int getEmpno() {
return empno;
}
//setter!!!
public void setNbno(int nbno) {
this.nbno = nbno;
}
public void setTitle(String title) {
this.title = title;
}
public void setCentent(String centent) {
this.centent = centent;
}
public void setCre_date(Date cre_date) {
this.cre_date = cre_date;
}
public void setWriter(String writer) {
this.writer = writer;
}
public void setRcnt(int rcnt) {
this.rcnt = rcnt;
}
public void setEmpno(int empno) {
this.empno = empno;
}
//ObJect로부터 상속받은 toString()은
//객체의 정보를 String형태로 제공하는 메소드였다
//하지만 이 클래스에서는
//필드의 값을 String형태로 제공하는 메소드로 재정의 하였다. 객체를 생성한 클래스에서 메소드가 재정의되어있다면 그 동작이 실행된다.
@Override
public String toString() {
return "NoticeBoardDTO [nbno=" + nbno + ", title=" + title + ", centent=" + centent + ", cre_date=" + cre_date
+ ", writer=" + writer + ", rcnt=" + rcnt + ", empno=" + empno + "]";
}
//method
//[접제][제] 리턴유형 메소드명(매개변수){}
//getter
/*
public 리턴유형 get필드명() {
return ~;
}
setter
public void set필드명(매개변수) {
필드=매개변수;
}
//setter
*/
}
package db.ex5;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
//메인클래스
~
!
//web에서는 불필요한 부분
public class Main {
public static void main(String[] args) {
NoticeBoardDAO ntBoardDAO = new NoticeBoardDAO();//DAO객체 생성
Scanner sc = new Scanner(System.in);
while(true){
System.out.println();
System.out.println();
System.out.println("---------------------------------------------------------------------------");
System.out.println(" 0.목록조회(Map방식) | 1.목록조회(Set방식) | 2.상세조회 | 3.등록 | 4.수정 | 5.삭제 | 6.종료 |");
System.out.println("---------------------------------------------------------------------------");
System.out.print("위 리스트 중에 원하는 메뉴번호를 입력하세요. : ");
int num = sc.nextInt(); //Scans the next token of the in
if(num==0) {//0. 목록조회(Map방식)
Map<Integer, NoticeBoardDTO> map = ntBoardDAO.getNoticeList2();
System.out.println("------------------아래는 entrySet()이용----------------");
//객체를 하나씩 처리 entrySet()이용 p.744
//Map.Entry<String, Integer> entrySet = map1.entrySet(); //--->그냥 테스트... 신경 안써도 됨.
Set<Map.Entry<Integer, NoticeBoardDTO>> entrySet = map.entrySet();
Iterator<Map.Entry<Integer, NoticeBoardDTO>> entryIterator = entrySet.iterator();
//while문 이용
while(entryIterator.hasNext()) {
Entry<Integer, NoticeBoardDTO> entry = entryIterator.next();
Integer key = entry.getKey();
//Integer value = entry.getValue(); wrapper 클래스 타입으로 저장
NoticeBoardDTO nbdto = entry.getValue(); //unBoxing해서 기본타입으로 저장
System.out.println(key+":"+nbdto);
}
System.out.println("--------------------------------------------------------------------------------------------------------------");
//key를 이용하여 value 꺼내기
//key를 알면 get(키 명)
//NoticeBoardDTO nbdto = map.get(1);
//System.out.println(nbdto);
System.out.println("-----------------아래는 ketSet()+while이용-----------------");
//key를 모르면 모든 key를 꺼내기 => while반복문
//꺼낸 key 각각에 대한 value를 꺼내기
Set<Integer> keys = map.keySet(); //map안에 있는 모든 키 꺼내기 // 원래 오브젝트타입인데 제너릭에 스트링 으로 지정해놔서 스트링 타입이다. 그래서 똑같이 <String> 제너릭 제한 걸어둔다.
Iterator<Integer> keyIterator = keys.iterator();//key하나씩 꺼내기 // 똑같이 <String> 제너릭 제한 걸어둔다.
while(keyIterator.hasNext()) { //꺼낼 key가 있는 동안
Integer key = keyIterator.next();//하나의 key가져오기
NoticeBoardDTO nbdto = map.get(key); //위에서 제너릭 걸어서 Integer타입이다. 맵에서 get은 key를 넣으면 value값을 가져온다.
System.out.println(key+":"+nbdto);
}
}
if(num==1) {//1. 목록조회
//타입 변수명 = ntBoardDAO.getNoticeList();
Set<NoticeBoardDTO> ntDTOSet = ntBoardDAO.getNoticeList();
// System.out.println("ntDTOSet = "+ntDTOSet); //오버라이딩 된 값 출력
System.out.println("총 게시글수 : "+ntDTOSet.size()); //주소
// NoticeBoardDTO test1 = ntDTOList.get(1); //--> 개인테스트
// System.out.println(test1);
// for( 타입 변수명 : ntDTOSet){
// System.out.println("------아래는 향상된 for문을 이용한 출력---------");
// for(NoticeBoardDTO ntdto : ntDTOSet) {
// //여튼 셋다 먹는다.
// System.out.println(ntdto);
// }
//
System.out.println("------아래는 iterator를 이용한 출력---------");
Iterator iter = ntDTOSet.iterator();
while(iter.hasNext()) {
NoticeBoardDTO e = iter.next();
System.out.println(e);
}
}else if(num==2) {//2. 상세조회
System.out.print("조회할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
//매개변수에 NoticeBoardDTO클래스의 객체주소를 넘겨준다.
// NoticeBoardDTO nbDTO = new NoticeBoardDTO(nbno); //매개변수의 주소를 넘기기 위한것
// ntBoardDAO.getNotice(nbDTO);
//리턴유형이 NoticeBoardDTO클래스인 getNotice()호출
// NoticeBoardDTO resultNTDTO = ntBoardDAO.getNotice(nbDTO); //리턴유형을 담기위한 결과물 즉 리턴되어지는 값을 받기 위해서 선언하는것.
NoticeBoardDTO resultNTDTO = ntBoardDAO.getNotice(nbno); //--원래 대로 복구 인데 리턴유형만 NoticeBoardDTO
//콘솔에 리턴받은 NoticeBoardDTO 객체내용을 출력
System.out.println("리턴받은 NoticeBoardDTO = "+resultNTDTO); //주소
System.out.println("리턴받은 NoticeBoardDTO = "+resultNTDTO.getNbno()); //리턴받은 주소값에서 마음대로 데이타값을 추출해서 본다.
// "select nbno, title, centent, cre_date, writer, rcnt, empno "
// System.out.printf("| %5d | %5s | %5s | %5s | %5s | %5d | %5d | \r\n------------------------------------------------------------------\r\n", no, title, centent, cre_date, writer, rcnt, empno);
// System.out.println("--아래는 특정글번호의 상세내용이 컬럼별 한줄로 출력");
// System.out.println("--nbno컬럼값:"+resultNTDTO.getNbno());
// System.out.println("--title컬럼값:"+resultNTDTO.getTitle());
// System.out.println("--centent컬럼값:"+resultNTDTO.getCentent());
// System.out.println("--cre_date컬럼값:"+resultNTDTO.getCre_date());
// System.out.println("--writer컬럼값:"+resultNTDTO.getWriter());
// System.out.println("--rcnt컬럼값:"+resultNTDTO.getRcnt());
// System.out.println("--empno컬럼값:"+resultNTDTO.getEmpno());
// System.out.println("---------------------------------");
System.out.println("------------------------------------------------------------------");
System.out.printf("| %5d | %5s | %5s | %5s | %5s | %5d | %5d | \r\n------------------------------------------------------------------\r\n",
resultNTDTO.getNbno(), resultNTDTO.getTitle(), resultNTDTO.getCentent(), resultNTDTO.getCre_date(), resultNTDTO.getWriter(), resultNTDTO.getRcnt(), resultNTDTO.getEmpno());
}else if(num==3) {//3. 등록
System.out.println("등록정보를 입력하세요.");
System.out.println("제목 : ");
String title = sc.next();
System.out.println("내용 : ");
String centent = sc.next();
System.out.println("작성자 : ");
String writer = sc.next();
// ntBoardDAO.addNotice(title, centent, writer);
// boolean insertResult = ntBoardDAO.addNotice(title, centent, writer); //리턴타입이 있는 형태의 메소드로 변경해줄수 있다 !! boolean
// System.out.println("insertResult = "+insertResult);
//NoticeBoardDTO타입의 객체를 생성해서 제시하자
NoticeBoardDTO nbDTOobj= new NoticeBoardDTO();
//user로부터 입력받은 제목, 내용 작성자를
//NoticeBoardDTO의 Setter를 호출하여 설정한 후
nbDTOobj.setTitle(title);
nbDTOobj.setCentent(centent);
nbDTOobj.setWriter(writer);
//매개변수가 없는 기본 생성자를 사용하였기 때문에 기본적으로 DTO에 있는 필드값들은 null로 초기화 되었고 title은 Not null 값이기 때문에 에러가 난다.
//그래서 메인에서 입력받은 값을 setter로 받아서 처리해야한다.
//ntBoardDAO.addnotice()를 호출하면서 넘기자
boolean insertResult = ntBoardDAO.addNotice(nbDTOobj);
System.out.println("updateNotice() 실행결과 = "+insertResult);
}else if(num==4) {//4. 수정
System.out.println("수정할 정보를 입력하세요.");
System.out.println("수정할 글번호 : ");
int nbno = sc.nextInt();
System.out.println("제목 : ");
String title = sc.next();
System.out.println("내용 : ");
String centent = sc.next();
System.out.println("작성자 : ");
String writer = sc.next();
//외부에서 클래스명 참조변수 = new 클래스명();
NoticeBoardDTO nbDTOobj= new NoticeBoardDTO();
//필드값을 설정해서 ntBoardDAO의 updateNotice()호출시 넘긴다.
nbDTOobj.setTitle(title);
nbDTOobj.setCentent(centent);
nbDTOobj.setWriter(writer);
nbDTOobj.setNbno(nbno);
int resultRowCnt = ntBoardDAO.updateNotice(nbDTOobj);
//업데이트 성공하면 true리턴 , 업데이트 실패하면 false리턴
System.out.println("resultRowCnt = "+resultRowCnt);
}else if(num==5) {//5. 삭제
System.out.print("삭제할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
//delNotice() 호출시 NoticeBoardDTO클래스 타입의 객체주소를 넘겨야한다.
//객체생성 클래스명 참조변수=new 클래스명(int 글번호);
//객체생성 NoticeBoardDTO 참조변수 = new NoticeBoardDTO(nbno);
// NoticeBoardDTO nbDTO = new NoticeBoardDTO(nbno);
// int resultRowCnt = ntBoardDAO.delNotice(nbDTO);
int resultRowCnt = ntBoardDAO.delNotice(nbno);
System.out.println("resultRowCnt = "+resultRowCnt);
}else if(num==6) {//6. 종료
break; //반복문 while 종료
}else {
System.out.println("기타-잘못된 번호");
}
}//while 문 종료6
System.out.println("종료합니다.!!!");
//db연결테스트
// Connection conn = JdbcUtil.getConnection();
// 클래스명 참조변수 = new 클래스명();
// 참조변수.메소드();
//전체목록 조회
// JdbcUtil.close(conn);
}
}
package db.ex5;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
//DAO:Data Access Object. db 연동
//DAO란 DB연동하여 DB작업을 제공하는 클래스이다.
//이 클래스는 Board관련 DB작업을 제공하는 클래스이다.
//이 클래스에서는 매개변수로 NoticeBoardDTO를 사용+
// 리턴유형을 NoticeBoardDTO로 지정
public class NoticeBoardDAO {
//field
//constructor
//method
//0.목록조회 --> public 게시글목록 getNoticeList2() {
//리턴유형이 NoticeBoardDTO클래스로 구성된 Set
public Map<Integer, NoticeBoardDTO> getNoticeList2() {
System.out.println("getNoticeList()진입");
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
String sql = "select nbno, title, centent, cre_date, writer, rcnt, empno " +
"from notice " +
"order by nbno desc";
conn = JdbcUtil.getConnection();
//key는 정수, value는 NoticeBoardDTO
Map<Integer, NoticeBoardDTO> map = new HashMap<Integer, NoticeBoardDTO>();
//클래스명 타입 참조변수명 = new 클래스명();
//HashMap<Integer, NoticeBoardDTO> map = new HashMap<Integer, NoticeBoardDTO>();
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
try {
System.out.println("try{}블럭안~~~");
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
//4.실행
System.out.println("4. getNoticeList() 실행");
while(rs.next()) {
int nbno = rs.getInt(1);
String title = rs.getString(2);
String centent = rs.getString(3);
Date cre_date = rs.getDate(4);
String writer = rs.getString(5);
int rcnt = rs.getInt(6);
int empno = rs.getInt(7);
//방법1. 기본생성자를 이용하여 객체를 생성하는경우 (객체를 매번 반복문안에서 생성해야한다. 밖에서 생성하면 다른객체에 들어간다?)
// NoticeBoardDTO nbdto=new NoticeBoardDTO(); //기본생성자 이용시 setter메소드 이용필요 setter안쓰면 나머지 setter메소드 안쓴 필드값은 자동초기화
// nbdto.setNbno(nbno);
// nbdto.setTitle(title);
// nbdto.setCentent(centent);
// nbdto.setCre_date(cre_date);
// nbdto.setWriter(writer);
// nbdto.setRcnt(rcnt);
// nbdto.setEmpno(empno);
//방법2. 파라미터가 있는 생성자를 이용하여 객체를 생성하는 경우
// NoticeBoardDTO nbdto=new NoticeBoardDTO(nbno, title, centent, cre_date, writer, rcnt, empno);
// NoticeBoardDTO nbdto=new NoticeBoardDTO(rs.getInt("nbno"), rs.getString("title"), rs.getString("centent"), rs.getDate("cre_date"), rs.getString("writer"), rs.getInt("rcnt"), rs.getInt("empno"));
NoticeBoardDTO nbdto=new NoticeBoardDTO(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getDate(4), rs.getString(5), rs.getInt(6), rs.getInt(7));
//공지사항게시판의 객체를 Map에 추가한다.
//여기세서는 Map에 넣는 key를 글번호를 사용하였다.
//rs.getInt("nbno"), rs.getInt(1)는 noticeBoard테이블의 글번호 컬럼의 값을
map.put(rs.getInt(1), nbdto); //반복문을 또 돌려도 되지만 와일문 안에 getInt 값을 이용
}//while문 끝
} catch (SQLException e) {
System.out.println("catch{}블럭안~~~");
e.printStackTrace();
}finally {
System.out.println("Exception 발생 상관없이 무조건 실행되는 finally블럭입니다.");
//5.반납-->exception 발생하지 않아도, 또는
//exception 발생하여 catch절에 들어갔어도
//finally절은 무조건 반드시 거쳐가야한다.
//반드시 실행해야하는 코드가 있다면 finally블럭을 이용
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}
return map;
}
//1.목록조회 --> public 게시글목록 getNoticeList() {
//리턴유형이 NoticeBoardDTO클래스로 구성된 Set
public Set<NoticeBoardDTO> getNoticeList() {
System.out.println("getNoticeList()진입");
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
String sql = "select nbno, title, centent, cre_date, writer, rcnt, empno " +
"from notice " +
"order by nbno desc";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//인터페이스 타입 참조변수명 = new 구현클래스명();
Set<NoticeBoardDTO> set = new HashSet();
//클래스명 타입 참조변수명 = new 클래스명();
//HashList<NoticeBoardDTO> set = new HashSet();
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("try{}블럭안~~~");
//4.실행
/*rs.get데이터타입(select순서)
rs.get데이터타입("컬럼명")*/
System.out.println("4. getNoticeList() 실행");
while(rs.next()) {
System.out.println();
System.out.println();
int nbno = rs.getInt(1);
String title = rs.getString(2);
String centent = rs.getString(3);
Date cre_date = rs.getDate(4);
String writer = rs.getString(5);
int rcnt = rs.getInt(6);
int empno = rs.getInt(7);
//방법1. 기본생성자를 이용하여 객체를 생성하는경우 (객체를 매번 반복문안에서 생성해야한다. 밖에서 생성하면 다른객체에 들어간다?)
NoticeBoardDTO nbdto=new NoticeBoardDTO(); //기본생성자 이용시 setter메소드 이용필요 setter안쓰면 나머지 setter메소드 안쓴 필드값은 자동초기화
nbdto.setNbno(nbno);
nbdto.setTitle(title);
nbdto.setCentent(centent);
nbdto.setCre_date(cre_date);
nbdto.setWriter(writer);
nbdto.setRcnt(rcnt);
nbdto.setEmpno(empno);
//완성된 공지사항 게시판의 객체를 List에 추가한다.
set.add(nbdto);
// System.out.println("안녕"+list.get(1)); //--->개인테스트 nbdto 하나 들어가 있기 떄문에 인덱스 값이 0만된다. 1부터는 안됨 에러난다.
//바로 꺼내서 못쓰는데 이걸 list에 담아서 리턴하면 main에서 반복문이나 프린트문으로 인덱스 써서 출력가능??왜?
//--->와일문 안이라 그런것 처음돌때 인덱스 0 밖에 안들어가 있는데 1찍으면 되겠냐?????????????????????????????
// System.out.println("----------------------------------------");
// System.out.printf("| %5d | %5s | %5s | %5s | \r\n----------------------------------------\r\n", nbno, title, cre_date, writer);
// System.out.println(" ");//줄바꿈
}//while문 끝
//System.out.println("4.쿼리실행결과 리턴받은 row수="+resultCnt);
// System.out.println("안녕"+list.get(1));
} catch (SQLException e) {
System.out.println("catch{}블럭안
~
");
e.printStackTrace();
}finally {
System.out.println("Exception 발생 상관없이 무조건 실행되는 finally블럭입니다.");
//5.반납-->exception 발생하지 않아도, 또는
//exception 발생하여 catch절에 들어갔어도
//finally절은 무조건 반드시 거쳐가야한다.
//반드시 실행해야하는 코드가 있다면 finally블럭을 이용
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}
// System.out.println("안녕"+list.get(1));
return set;
}//getNoticeList() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//2.상세조회 -->public 게시글 getNotice(매개변수리스트) {
//매개변수 int nbno : 글번호
//리턴유형이 NoticeBoardDTO클래스
public NoticeBoardDTO getNotice(int nbno) {
// public void getNotice(NoticeBoardDTO nbDTO) {//int nbno는 글번호
// public NoticeBoardDTO getNotice(NoticeBoardDTO nbDTO) {//int nbno는 글번호
System.out.println("getNotice()진입 nbno="+nbno);
// System.out.println("getNotice()진입 nbno="+nbDTO); //주소찍힌다.
// System.out.println("getNotice()진입 nbno="+nbDTO.getNbno());
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
NoticeBoardDTO ntDTOobj = null;
//select결과로 받은 컬럼의 값들을 NoticeBoardDTO()객체로 만들기 위해 선언한 변수 및 초기화
String sql = "select nbno, title, centent, cre_date, writer, rcnt, empno " +
"from notice " +
"where nbno = ?";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
//매개변수 nbDTO에는 NoticeBoardDTO 클래스의 객체주소가 저장되어있다.
//nbDTO.getNbno():저장된 주소를 통해 getNono()메소드를 호출한다.
/*pstmt.setInt(1, nbDTO.getNbno()):호출된 int타입의 값을 여기에서는 글번호를 가져와 1번째 ?의값으로 설정한다.*/
pstmt.setInt(1, nbno);
rs = pstmt.executeQuery(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
//4.실행
System.out.println("4. getNoticeList() 실행");
if(rs.next()) {//select 결과로 record가 존재할 경우
int no = rs.getInt(1);
String title = rs.getString(2);
String centent = rs.getString(3);
Date cre_date = rs.getDate(4);
String writer = rs.getString(5);
int rcnt = rs.getInt(6);
int empno = rs.getInt(7);
ntDTOobj = new NoticeBoardDTO(no, title, centent, cre_date, writer, rcnt, empno);
//이제 리턴유형을 NoticeBoardDTO로 선언하고 그 값을 객체로 만들었으니 메인에서 뿌리면 되서 아래 프린트문은 필요없다!!
// System.out.println("------------------------------------------------------------------");
// System.out.printf("| %5d | %5s | %5s | %5s | %5s | %5d | %5d | \r\n------------------------------------------------------------------\r\n", no, title, centent, cre_date, writer, rcnt, empno);
// System.out.println(" ");//줄바꿈
}else {//select 결과로 record가 존재하지않을 경우
System.out.println("조회한 글번호"+nbno+"에 해당하는 글이 존재하지 않아요");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
return ntDTOobj;
}//getNotice() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//3.등록 - title 제목, centent 내용, 작성자명 writer
//리턴값 - 입력성공시 true, 실패시 false
//매개변수 - NoticeBoardDTO ntDTO에는 주소가 저장되면주소가 출력되고
//주소가 저장되어있지 않으면 NULL이 출력된다.
public boolean addNotice(NoticeBoardDTO ntDTO) {
// public boolean addNotice(String title, String centent, String writer) {
// System.out.printf("addNotice()진입 title:%s, centent:%s, writer:%s\r\n", title, centent, writer);
//주소가 저장되어있지 않으면 NULL출력
System.out.println("addNotice() ntdTO = "+ntDTO);//주소출력
System.out.printf("addNotice()진입 title:%s, centent:%s, writer:%s\r\n",
ntDTO.getTitle(), ntDTO.getCentent(), ntDTO.getWriter());
PreparedStatement pstmt = null;
Connection conn = null;
// ResultSet rs = null;
boolean result = false;
String sql = "insert into notice(nbno, title, centent, cre_date, writer, rcnt, empno) " +
"values(notice_seq.nextval, ?, ?, SYSDATE, ?, 0,7900)";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비 & 4.실행
System.out.println("3. addNotice() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, ntDTO.getTitle());
pstmt.setString(2, ntDTO.getCentent());
pstmt.setString(3, ntDTO.getWriter());
int resultcnt = pstmt.executeUpdate(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
System.out.println("리턴되는 행수");
if(resultcnt==1) {
System.out.println("입력성공");
result=true;
}else {
System.out.println("입력실패");
result=false;
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. addNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
return result;
}
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//4.수정 - 글번호 nbno, title 제목, centent 내용, 작성자명 writer
// public int updateNotice(int nbno, String title, String centent, String writer) {
//매개변수 ntDTO에는 NoticeBoardDTO의 주소 또는 NULL저장
public int updateNotice(NoticeBoardDTO ntDTO) {
// System.out.printf("updateNotice()진입 nbno:%d, title:%s, centent:%s, writer:%s\r\n", nbno, title, centent, writer);
//주소가 저장되어있지 않으면 NULL출력
System.out.println("updateNotice() ntDTO = "+ntDTO);//주소출력
System.out.printf("updateNotice()진입 nbno:%d, title:%s, centent:%s, writer:%s\r\n",
ntDTO.getNbno(), ntDTO.getTitle(), ntDTO.getCentent(), ntDTO.getWriter());
PreparedStatement pstmt = null;
Connection conn = null;
int resultcnt = 0;
// ResultSet rs = null;
String sql = "update notice set title=?, centent=?, writer=? " +
"where nbno=?";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비 & 4.실행
System.out.println("3. updateNotice() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, ntDTO.getTitle());
pstmt.setString(2, ntDTO.getCentent());
pstmt.setString(3, ntDTO.getWriter());
pstmt.setInt(4, ntDTO.getNbno());
resultcnt = pstmt.executeUpdate(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
if(resultcnt>=1) {
System.out.println("수정성공");
}else {
System.out.println("수정실패");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. updateNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
return resultcnt;
}
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//5.삭제 - nbno 글번호
/*리턴유형 int - delete 실행시 리턴되는 행수*/
public int delNotice(int bno) {
// public int delNotice(NoticeBoardDTO ntDTO) {
//public int delNotice(int nbno) {
//참조변수 ntDTO에는 주소가 저장되었다.
// System.out.println("delNotice()진입 참조변수ntDTO="+ntDTO); //주소출력
// System.out.println("delNotice()진입 참조변수ntDTO="+ntDTO.getNbno()); //글번호 출력
System.out.println("delNotice()진입 nbno="+bno);
PreparedStatement pstmt = null;
Connection conn = null;
int resultcnt = 0;//delete실행시 리턴되는 행수를 저장하기위한변수선언 및 초기화
// ResultSet rs = null;
String sql = "delete from notice where nbno=?";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비 & 4.실행
System.out.println("3. delNotice() 객체 준비");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno); //1번째 ?에 글번호
resultcnt = pstmt.executeUpdate();
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
//여기에서는 삭제성공하면 1리턴
//여기에서는 삭제실패하면 0리턴
if(resultcnt>=1) {
System.out.println("삭제성공");
}else {
System.out.println("삭제실패");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. delNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
return resultcnt;
}
}
package db.ex5;
import java.util.Date;
/*
- DTO(Data Transfer Object)
- 순수하게 데이터를 담아 계층 간으로 전달하는 객체이다.
- 로직을 갖고 있지 않은 순수한 데이터 객체이며 메서드로는 getter/setter 만을 갖는다.
- 여기서 getter/setter 이외에 다른 로직이 필요 없는 이유를 좀 더 자세히 살펴보자면,
만약 DTO가 데이터 전달 만을 위한 객체라고 한다면
완전히 데이터 '전달' 용도로만 사용하기 때문에
getter/setter로직만이 필요하지 다른 로직이 필요하지 않은 것이다.
- */
//이 클래스는 DB의 noticeBoard테이블의 데이터를 저장, 제공하는 역할을 하는 DTO클래스이다.
public class NoticeBoardDTO {
//field : 변수 초기화 및 전역변수 설정, 데이터 저장
//[접제][제] 데이터타입 필드명[=초기값]
//초기값을 생략하면 데이터타입별로 자동초기화 된다.
//(정수 = 0, 실수 = 0.0, boolean = false, char = 공백
//-->프리미티브타입
//배열,클래스, : null(힙영역안에 참조주소가 있는 타입)
//--> 레퍼런스타입
private int nbno = 0; //글번호
private String title = null; //제목
private String centent = null; //내용
private Date cre_date = null; //작성일
private String writer = null; //작성자
private int rcnt = 0; //조회수
private int empno = 0; //사원번호(여기에서는 공지사항게시판을 관리하는 사원번호)
//constructor
//[접제][제] 클래스명 (매개변수){}
//외부에서 클래스명 참조변수 = new 클래스명();
public NoticeBoardDTO(){}//default constructor
//외부에서 클래스명 참조변수 = new 클래스명(글번호);
public NoticeBoardDTO(int nbno){
this.nbno = nbno;
}
//외부에서 클래스명 참조변수 = new 클래스명(글번호, ~,~,~,~,~, 사번){};
public NoticeBoardDTO(int nbno, String title, String centent, Date cre_date, String writer, int rcnt, int empno){
this.nbno = nbno;
this.title = title;
this.centent = centent;
this.cre_date = cre_date;
this.writer = writer;
this.rcnt = rcnt;
this.empno = empno;
}
//getter setter는 ch07챕터에 machine01 클래스나 student01 클래스에 사용했던 방법이 잘 나와있다 .
//생성자 이용해서 초기에 객체 생성시에 입력값을 세팅할 수도 있으나 getter setter의 메소드를 미리 선언해서 사용하면 그 이후에 값을 세팅하고 불러올 수 있다.
//여기에서 필드 데이터를 하나하나 선언해서 메소드화하여 사용할 수도 있고 getinfo, setinfo 와 같이 한번에 세팅하고 한번에 불러올수있도록 메소드를 만들 수도 있다.
//getter!!!
public int getNbno() {
return nbno;
}
public String getTitle() {
return title;
}
public String getCentent() {
return centent;
}
public Date getCre_date() {
return cre_date;
}
public String getWriter() {
return writer;
}
public int getRcnt() {
return rcnt;
}
public int getEmpno() {
return empno;
}
//setter!!!
public void setNbno(int nbno) {
this.nbno = nbno;
}
public void setTitle(String title) {
this.title = title;
}
public void setCentent(String centent) {
this.centent = centent;
}
public void setCre_date(Date cre_date) {
this.cre_date = cre_date;
}
public void setWriter(String writer) {
this.writer = writer;
}
public void setRcnt(int rcnt) {
this.rcnt = rcnt;
}
public void setEmpno(int empno) {
this.empno = empno;
}
//ObJect로부터 상속받은 toString()은
//객체의 정보를 String형태로 제공하는 메소드였다
//하지만 이 클래스에서는
//필드의 값을 String형태로 제공하는 메소드로 재정의 하였다. 객체를 생성한 클래스에서 메소드가 재정의되어있다면 그 동작이 실행된다.
@Override
public String toString() {
// return "NoticeBoardDTO [nbno=" + nbno + ", title=" + title + ", centent=" + centent + ", cre_date=" + cre_date
// + ", writer=" + writer + ", rcnt=" + rcnt + ", empno=" + empno + "]";
return "-------------------------------------------------------\r\n"+"| "+nbno+" | "+title+" | "+centent+" | "+cre_date+" | "+writer+" | "+rcnt+" | "+empno+" |"+"\r\n-------------------------------------------------------";
//
// System.out.println("----------------------------------------");
// System.out.printf("| %5d | %5s | %5s | %5s | \r\n----------------------------------------\r\n", nbno, title, cre_date, writer);
}
//method
//[접제][제] 리턴유형 메소드명(매개변수){}
//getter
/*
public 리턴유형 get필드명() {
return ~;
}
setter
public void set필드명(매개변수) {
필드=매개변수;
}
//setter
*/
}
'java' 카테고리의 다른 글
22.12.06 java & DB(Oracle) 연동_7 + 리턴유형(DTO 및 List 타입) (0) | 2023.02.20 |
---|---|
22.12.05 java & DB(Oracle) 연동_6 (0) | 2023.02.20 |
22.12.02 java & DB(Oracle) 연동_5 (0) | 2023.02.20 |
22.11.29 java & DB(Oracle) 연동_3 (0) | 2023.02.20 |
22.11.25 java & DB(Oracle) 연동 및 콘솔 출력 (0) | 2023.02.16 |