package db.ex2; //변수선언->입력->작업->출력
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//DB연결을 위한 클래스이다.
//JDBC Driver등록, 연결 Connection 얻기, 자원반납 기능을 제공
public class JdbcUtil {
//field --굳이 객체 생성하지 않아도 사용 및 접근이 가능하도록 static을 붙여준다.
static String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
static String user = "scott";
static String password = "tiger";
//constructor //해당 클래스에 메소드들이 모두 static 으로 선언이 되어있어서 다른 클래스에서 JdbcUtil.메소드명하면 다 끌어다 쓸수 있지만. 만약에 static이 없다면
//해당클래스 참조변수 = new 해당클래스() 이런식으로 인스턴스화 시켜서 불러 써야한다. 이럴경우 메소드 형태보다는 매개변수 생성자 형태로 만들어놓으면 더 편하다.
//method
//1. JDBC Driver등록 & 2. 연결 Connection 얻기
//트라이캐치문 지우고 메인메소드명에 static붙이고 connection conn=null;을 메인 메소드 안으로 가져온다.
//한마디로 타라이 캐치 문으로 넣든지 아니면 메소드 전체에 static으로 선언하든
public static Connection getConnection() {
Connection conn=null;
try {
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("1. JDBC Driver등록-성공");
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFoundException발생 e="+e);
e.printStackTrace();
}
//2.연결 Connection얻기
//DriverManager.getConnection(연결DB서버url, 접속user명, 비밀번호)
try {
conn=DriverManager.getConnection(url, user, password);
System.out.println("2. Connection얻기-성공");
} catch (SQLException e) {
System.out.println("SQLException발생");
e.printStackTrace();
}
return conn; //--> 메소드 명에 리턴타입을 Connection으로 명시 하였으므로 리턴값을 줘야한다.
}
//5. 자원반납
//Statement 객체 또는 PreparedStatement 객체
public static void close(Statement pstmt) {
try {
if(pstmt!=null) {
pstmt.close();
}
System.out.println("pstmt 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
//5. 자원반납
//ResultSet 객체
public static void close(ResultSet rs) {
try {
if(rs!=null) {
rs.close();
}
System.out.println("rs 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
//접속종료
public static void close(Connection conn) {
try {
if(conn!=null) {
conn.close();
}
System.out.println("conn 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package db.ex2;
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();
}else if(num==2) {//2. 상세조회
System.out.print("조회할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
ntBoardDAO.getNotice(nbno);
}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);
}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();
int resultRowCnt = ntBoardDAO.updateNotice( nbno, title, centent, writer);
System.out.println("resultRowCnt = "+resultRowCnt);
}else if(num==5) {//5. 삭제
System.out.print("삭제할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
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.ex2;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
//DAO:Data Access Object. db 연동
//DAO란 DB연동하여 DB작업을 제공하는 클래스이다.
//이 클래스는 Board관련 DB작업을 제공하는 클래스이다.
public class NoticeBoardDAO {
//field
//constructor
//method
// 목록조회 : get
List, select
,
// 상세조회 : get
, ~info, ~Detail
// 입력 : insert
, add
, register
, regi~
// 수정 : update
, modify
, modi
, change;
// 삭제 : delete
, del
, remove
//1.목록조회 --> public 게시글목록 getNoticeList() {
public void getNoticeList() {
System.out.println("getNoticeList()진입");
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
String sql = "select nbno, title, cre_date, writer " +
"from notice " +
"order by nbno desc";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
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);
Date cre_date = rs.getDate(3);
String writer = rs.getString(4);
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);
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}//getNoticeList() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//2.상세조회 -->public 게시글 getNotice(매개변수리스트) {
public void getNotice(int nbno) {//int nbno는 글번호
System.out.println("getNotice()진입 nbno="+nbno);
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
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);
pstmt.setInt(1, nbno);
rs = pstmt.executeQuery(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
//4.실행
System.out.println("4. getNoticeList() 실행");
if(rs.next()) {
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);
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 {//조회한 사번인 사원이 존재하지않을 경우
System.out.println("조회한 사번("+nbno+")인 사원이 존재하지 않아요");
}
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}//getNotice() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//3.등록 - title 제목, centent 내용, 작성자명 writer
//리턴값 - 입력성공시 true, 실패시 false
public boolean addNotice(String title, String centent, String writer) {
System.out.printf("addNotice()진입 title:%s, centent:%s, writer:%s\r\n", title, centent, writer);
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, title);
pstmt.setString(2, centent);
pstmt.setString(3, writer);
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) {
System.out.printf("updateNotice()진입 nbno:%d, title:%s, centent:%s, writer:%s\r\n", nbno, title, centent, writer);
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, title);
pstmt.setString(2, centent);
pstmt.setString(3, writer);
pstmt.setInt(4, nbno);
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 nbno) {
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, nbno);
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.ex3; //변수선언->입력->작업->출력
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//DB연결을 위한 클래스이다.
//JDBC Driver등록, 연결 Connection 얻기, 자원반납 기능을 제공
public class JdbcUtil {
//field --굳이 객체 생성하지 않아도 사용 및 접근이 가능하도록 static을 붙여준다.
static String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
static String user = "scott";
static String password = "tiger";
//constructor //해당 클래스에 메소드들이 모두 static 으로 선언이 되어있어서 다른 클래스에서 JdbcUtil.메소드명하면 다 끌어다 쓸수 있지만. 만약에 static이 없다면
//해당클래스 참조변수 = new 해당클래스() 이런식으로 인스턴스화 시켜서 불러 써야한다. 이럴경우 메소드 형태보다는 매개변수 생성자 형태로 만들어놓으면 더 편하다.
//method
//1. JDBC Driver등록 & 2. 연결 Connection 얻기
//트라이캐치문 지우고 메인메소드명에 static붙이고 connection conn=null;을 메인 메소드 안으로 가져온다.
//한마디로 타라이 캐치 문으로 넣든지 아니면 메소드 전체에 static으로 선언하든
public static Connection getConnection() {
Connection conn=null;
try {
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("1. JDBC Driver등록-성공");
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFoundException발생 e="+e);
e.printStackTrace();
}
//2.연결 Connection얻기
//DriverManager.getConnection(연결DB서버url, 접속user명, 비밀번호)
try {
conn=DriverManager.getConnection(url, user, password);
System.out.println("2. Connection얻기-성공");
} catch (SQLException e) {
System.out.println("SQLException발생");
e.printStackTrace();
}
return conn; //--> 메소드 명에 리턴타입을 Connection으로 명시 하였으므로 리턴값을 줘야한다.
}
//5. 자원반납
//Statement 객체 또는 PreparedStatement 객체
public static void close(Statement pstmt) {
try {
if(pstmt!=null) {
pstmt.close();
}
System.out.println("pstmt 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
//5. 자원반납
//ResultSet 객체
public static void close(ResultSet rs) {
try {
if(rs!=null) {
rs.close();
}
System.out.println("rs 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
//접속종료
public static void close(Connection conn) {
try {
if(conn!=null) {
conn.close();
}
System.out.println("conn 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package db.ex3;
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();
}else if(num==2) {//2. 상세조회
System.out.print("조회할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
//매개변수에 NoticeBoardDTO클래스의 객체주소를 넘겨준다.
NoticeBoardDTO nbDTO = new NoticeBoardDTO(nbno);
ntBoardDAO.getNotice(nbDTO);
// ntBoardDAO.getNotice(nbno);
}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.ex3;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
//DAO:Data Access Object. db 연동
//DAO란 DB연동하여 DB작업을 제공하는 클래스이다.
//이 클래스는 Board관련 DB작업을 제공하는 클래스이다.
//이 클래스에서는 매개변수로 NoticeBoardDTO를 사용하는 예시....
public class NoticeBoardDAO {
//field
//constructor
//method
// 목록조회 : get
List, select
,
// 상세조회 : get
, ~info, ~Detail
// 입력 : insert
, add
, register
, regi~
// 수정 : update
, modify
, modi
, change;
// 삭제 : delete
, del
, remove
//1.목록조회 --> public 게시글목록 getNoticeList() {
public void getNoticeList() {
System.out.println("getNoticeList()진입");
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
String sql = "select nbno, title, cre_date, writer " +
"from notice " +
"order by nbno desc";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
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);
Date cre_date = rs.getDate(3);
String writer = rs.getString(4);
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);
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}//getNoticeList() 끝
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//2.상세조회 -->public 게시글 getNotice(매개변수리스트) {
public void 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;
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()) {
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);
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 {//조회한 사번인 사원이 존재하지않을 경우
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);
}//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.ex3;
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 클래스명();
NoticeBoardDTO(){}//default constructor
//외부에서 클래스명 참조변수 = new 클래스명(글번호);
NoticeBoardDTO(int nbno){
this.nbno = nbno;
}
//외부에서 클래스명 참조변수 = new 클래스명(글번호, ~,~,~,~,~, 사번){};
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;
}
//method
//[접제][제] 리턴유형 메소드명(매개변수){}
//getter
/*
public 리턴유형 get필드명() {
return ~;
}
setter
public void set필드명(매개변수) {
필드=매개변수;
}
//setter
*/
}
package db.ex4;
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();
}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); //주소
// "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;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
//DAO:Data Access Object. db 연동
//DAO란 DB연동하여 DB작업을 제공하는 클래스이다.
//이 클래스는 Board관련 DB작업을 제공하는 클래스이다.
//이 클래스에서는 매개변수로 NoticeBoardDTO를 사용+
// 리턴유형을 NoticeBoardDTO로 지정
public class NoticeBoardDAO {
//field
//constructor
//method
//1.목록조회 --> public 게시글목록 getNoticeList() {
public void getNoticeList() {
System.out.println("getNoticeList()진입");
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
String sql = "select nbno, title, cre_date, writer " +
"from notice " +
"order by nbno desc";
//1. 드라이버등록 --> 2. 커넥션 얻기 --> 3. 객체준비 --> 4. 실행 --> 5. 반납
conn = JdbcUtil.getConnection();//1.드라이버등록 및 2.커넥션 얻기
//3.객체준비
System.out.println("3. getNoticeList() 객체 준비");
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);
Date cre_date = rs.getDate(3);
String writer = rs.getString(4);
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);
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. getNoticeList() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
JdbcUtil.close(rs);
JdbcUtil.close(conn);
}//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;
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;
}
//method
//[접제][제] 리턴유형 메소드명(매개변수){}
//getter
/*
public 리턴유형 get필드명() {
return ~;
}
setter
public void set필드명(매개변수) {
필드=매개변수;
}
//setter
*/
}
'java' 카테고리의 다른 글
22.12.07 java & DB(Oracle) 연동_7 + 리턴유형(DTO 및 List 타입)_2 (0) | 2023.02.20 |
---|---|
22.12.06 java & DB(Oracle) 연동_7 + 리턴유형(DTO 및 List 타입) (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 |