package db.ex1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
//scott.emp에 DML작업
//DML중에서는 시퀀스를 사용한 INSERT연습
public class DMLex02 {
//필드
String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
String user = "scott";
String password = "tiger";
Connection conn=null;
// static Statement stmt =null;
PreparedStatement pstmt=null;
ResultSet rs =null; //select 쿼리문의 실행결과 집합을 저장하기 위한 변수선언 및 초기화
//생성자
// [접근제한자] 클래스명(){}
public DMLex02() {} //기본생성자 - 매개변수가 없는 생성자
//메소드
//1. JDBC Driver등록 & 2. 연결 Connection 얻기
// [접근제한자] [제어자] 리턴유형 메소드명(매개변수리스트) {}
// public Connection dbConnection() { //리턴 유형을 void에서 밑에 return = conn;을 선언해줘야하니 Connection으로 수정
public void dbConnection() {
//1. JDBC Driver등록
try {
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("1. JDBC Driver 등록 - 성공");
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFoundException발생 e=");
e.printStackTrace();
}//문제가 왜 발생이 됐는지 원인에 대한 트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !
//2. 연결 Connection 얻기
try {
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}
// return conn;
}
public static void main(String[] args) {
//객체생성
DMLex02 obj = new DMLex02();
//1. JDBC Driver등록 & 2. 연결 Connection 얻기
// Connection cn = obj.dbConnection(); ///--->>Connection cn = obj.conn; 같은말인데... 위에 dbconnection에 리턴값이 없으면 이렇게 써야한다.
obj.dbConnection();
//3. 객체 준비 & 4. 쿼리실행
//사원입사 -> 사원목록조회 -> 사원삭제 -> 사원목록 조회
System.out.println(); //빈줄
System.out.println("----------------------아래는 초기 사원목록 조회------------------------- ----");
//사원목록조회
obj.selectEmpList();
System.out.println(); //빈줄
// System.out.println("-----------------------아래는 사원입사 --------------------------------");
//사원입사
//obj.insertEmp(9010, "김민재", "사원", 2789, 1234);
// obj.insertEmp("이강인", "개발", 4800, 1500);
System.out.println(); //빈줄
// System.out.println("----------------------아래는 사원목록 조회-----------------------------");
//사원목록조회
// obj.selectEmpList();
System.out.println(); //빈줄
System.out.println("----------------------------아래는 사원정보 수정------------------------------");
//사원정보수정
obj.updateEmp(7654);
//obj.selectEmp(7566); //---> 해당 쿼리 조인되어있기 때문에 deptno table null인 값을 매개변수로 받으면 에러발생!!!
System.out.println("---------------------------아래는 특정사원목록 조회------------------------------");
//특정사원조회
obj.selectEmp(7902);
System.out.println(); //빈줄
// System.out.println("-----------------------아래는 사원삭제 --------------------------------");
//삭제
// obj.deleteEmp(9010); //사번 9010인 사원 삭제
System.out.println();//빈줄
// System.out.println("-------------------------아래는 사원목록조회----------------------------");
//사원목록조회
// obj.selectEmpList();
//5. 자원반납
// obj.close(pstmt);
// obj.close(cn); //obj.close(obj.conn); 리턴값과 메소드에 Connection타입 말고 void로 하면 이렇게 해줘야한다. 애매허다 ㅋㅋ
}//main 끝
//수정
// public static void updateEmp(int empNo, String ename, String job, int pay, int comm) {
public void updateEmp(int empNo) {
String sql1 = "update emp " +
"set sal=sal*5 " +
"where empno=?";
String sql2 = "select empno, ename, job, sal, dname "+
"from emp e join dept d on e.deptno=d.deptno "+
"where e.empno=?";
try {
pstmt = conn.prepareStatement(sql1);
System.out.println("3. prepareStatement 객체 생성");
pstmt.setInt(1, empNo);
int resultCnt = pstmt.executeUpdate();
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultCnt);
System.out.println(resultCnt);
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
pstmt = conn.prepareStatement(sql2); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
System.out.println("3. 객체 준비 완료!");
pstmt.setInt(1, empNo);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
int eno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
int sal = rs.getInt(4);
String dname = rs.getString(5);
System.out.printf("%10d | %15s | %15s | %15d | %15s", eno, ename, job, sal, dname);
System.out.println(" ");//줄바꿈
}else {//조회한 사번인 사원이 존재하지않을 경우
System.out.println("조회한 사번("+empNo+")인 사원이 존재하지 않아요");
}
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념
try {
if(pstmt!=null) { //먼저 in 한것이 나중에 out하는 스택개념
pstmt.close();
}
// if(conn!=null){ -->주석처리 안하면 다음 메소드 실행 불가.connection을 끊어버려서
// conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
// } //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}//updateEmp의 끝
//특정사원조회
public void selectEmp(int empno) {
String sql = "select empno, ename, job, sal, nvl(e.comm, 1230) as bonus, dname "+
"from emp e join dept d on e.deptno=d.deptno "+
"where e.empno=?";
try {
//stmt = conn.createStatement();
pstmt = conn.prepareStatement(sql); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
System.out.println("3. 객체 준비 완료!");
pstmt.setInt(1, empno);
ResultSet rs = pstmt.executeQuery();
System.out.println("4. 쿼리문 실행 결과");
if(rs.next()) { //rs.next()는 다음행(new row)있으면 true리턴
// while(rs.next()) { //행이 여러개 검색 될수 있는 매개변수 ex)deptno 같은 값이면 여러명 조회되기 떄문에 안에 while문을 돌려주는 것이 맞다.
//rs.get데이터타입(select 컬럼순서) 첫번째 컬럼은 1, 두번쨰 컬럼은 2
//rs.get데이터타입("컬럼명 또는 컬럼별칭")
int eno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
double sal = rs.getDouble(4);
double bonus = rs.getDouble(5);
//Date date = rs.getDate(4);
//String strHireDate = rs.getString("hiredate");
String dname = rs.getString(6); //--->실수형태로 바꿔도 된다.
// System.out.print(eno + " | ");
// System.out.print(ename + " | ");
// System.out.print(job + " | ");
// System.out.print(date + " | ");
// System.out.println(sal);
//%d : 숫자
//%s : 문자열
// \r\n : 줄바꿈
//한줄로 출력
System.out.printf("%10d | %15s | %15s | %15f | %15f | %15s", eno, ename, job, sal, bonus, dname);
System.out.println(" ");//줄바꿈
// }
}else {//조회한 사번인 사원이 존재하지않을 경우
System.out.println("조회한 사번("+empno+")인 사원이 존재하지 않아요"); //--> 만약 이 매개변수 값이 사번이 아닌 (유니크한 값이 아닌) 부서번호 같은 값을 매개변수로 입력 받게 되면 if문 안에 while문을 추가해야한다.여러명이니까.
}
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
try {
if(rs!=null) {
rs.close();
}
if(pstmt!=null) {
pstmt.close();
}
System.out.println("5.selectEmp()의 pstmt 자원반납");
} catch (SQLException e) {
e.printStackTrace();
}
}//selectEMP()의 끝
//자원반납
//상위클래스명 참조변수 = new 하위클래스명();
//인터페이스명 참조변수 = new 구현클래스명();
// [접근제한자] 제어자 리턴유형 메소드명(매개변수리스트)
//자원반납, 해제 Statement, PreparedStatement
public void close(Object pstmt){ //PreparedStatement 보다 상위 클래스 Statement 이기 때문에 더 상위클래스로 선언(다형성) Object...해도되지만 close 메소드를 못쓴다. 그래서 강제 형변환 진행
try {
if(pstmt!=null) {
if(pstmt instanceof Statement)
((Statement)pstmt).close();
}
if(pstmt instanceof PreparedStatement) {
((PreparedStatement)pstmt).close();
}
if(conn!=null) {
conn.close();
}
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}//close 끝
//자원반납 Connection --메소드 오버로딩
public void close(Connection conn){
try {
if(conn!=null) {
conn.close();
}
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
//입력
// public void insertEmp(int empNo, String ename, String job, int pay, int comm) {
public void insertEmp(String ename, String job, int pay, int comm) {
// System.out.println("insertEmp()진입 empNo = "+empNo+", ename = "+ename+", job = "+job+", pay = "+pay+", comm = "+comm);
System.out.println("insertEmp()진입 empNo = , ename = "+ename+", job = "+job+", pay = "+pay+", comm = "+comm);
// System.out.printf("insertEmp()진입 empNo : %d, ename : %s, job : %s, pay : %d, comm : %d\r", empNo, ename, job, pay, comm);
System.out.printf("insertEmp()진입 empNo : ename : %s, job : %s, pay : %d, comm : %d\r", ename, job, pay, comm);
String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
"values(emp_empno_seq.nextval, ?, ?, sysdate, ?, ?)";
//"values(?, ?, ?, sysdate, ?, ?)";
try {
pstmt = conn.prepareStatement(sql); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
// pstmt.setInt(1, empNo);
// pstmt.setString(2, ename);
// pstmt.setString(3, job);
// pstmt.setInt(4, pay);
// pstmt.setInt(5, comm);
pstmt.setString(1, ename);
pstmt.setString(2, job);
pstmt.setInt(3, pay);
pstmt.setInt(4, comm);
int resultCnt = pstmt.executeUpdate();
System.out.println("4. 쿼리문 실행결과로 받은 record 수 = "+resultCnt);
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
}
try {
if(pstmt!=null) {
pstmt.close();
}
System.out.println("5.insertEmp()의 pstmt 자원반납");
} catch (SQLException e) {
e.printStackTrace();
}
}
//삭제
public void deleteEmp(int empNo) {
System.out.println("deleteEmp()진입 empNo = "+empNo);
String sql = "delete from emp " +
"where empno= ?";
try {
pstmt = conn.prepareStatement(sql); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
System.out.println("3. 객체 준비 완료!");
} catch (SQLException e1) {
e1.printStackTrace();
}
//4.쿼리실행
try {
pstmt.setInt(1, empNo);
int resultCnt = pstmt.executeUpdate();
System.out.println("4. 쿼리문 실행!!");
System.out.println("쿼리문 실행결과로 받은 record 수 = "+resultCnt);
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//5.자원해제
try {
pstmt.close();
System.out.println("5.deleteEmp()의 pstmt 자원반납");
} catch (SQLException e) {
e.printStackTrace();
}
}//deleteEmp()끝
//사원목록조회
public void selectEmpList() {
String sql = "select empno, ename, job, hiredate, sal "+
"from emp";
try {
//stmt = conn.createStatement();
pstmt = conn.prepareStatement(sql); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
System.out.println("3. 객체 준비 완료!");
ResultSet rs = pstmt.executeQuery();
System.out.println("4. 쿼리문 실행 결과");
while(rs.next()) { //rs.next()는 다음행(new row)있으면 true리턴
//rs.get데이터타입(select 컬럼순서) 첫번째 컬럼은 1, 두번쨰 컬럼은 2
//rs.get데이터타입("컬럼명 또는 컬럼별칭")
int eno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
Date date = rs.getDate(4);
double sal = rs.getDouble(5); //--->실수형태로 바꿔도 된다.
// System.out.print(eno + " | ");
// System.out.print(ename + " | ");
// System.out.print(job + " | ");
// System.out.print(date + " | ");
// System.out.println(sal);
//%d : 숫자
//%s : 문자열
// \r\n : 줄바꿈
//한줄로 출력
System.out.printf("%10d | %15s | %15s | %15s | %15f", eno, ename, job, date, sal);
System.out.println(" ");//줄바꿈
}
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
try {
if(rs!=null) {
rs.close();
}
if(pstmt!=null) {
pstmt.close();
}
System.out.println("5.selectEmpList()의 pstmt 자원반납");
} catch (SQLException e) {
e.printStackTrace();
}
}//selectEmpList 끝
}
package db.ex1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//DB연결을 위한 클래스이다
public class DBConnectionTest {
public static void main(String[] args) {
String url ="jdbc:oracle:thin:@127.0.0.1:1521/xe";
String user="scott";
String password="tiger";
Connection conn=null;
//1.JDBC Driver등록
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFoundException발생 e="+e);
e.printStackTrace();
}
System.out.println("1.JDBC Driver등록-성공");
//2.연결 Connection얻기
//DriverManager.getConnection(연결DB서버url, 접속user명, 비밀번호)
try {
conn=DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("SQLException발생");
e.printStackTrace();
}
System.out.println("2.Connection얻기-성공");
//3.객체준비-Statement객체,PreparedStatement객체
//4.쿼리실행
//5.자원반납
try {
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("5.자원반납완료");
}
}
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
//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.sql.Connection;
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);
}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();
ntBoardDAO.updateNotice( nbno, title, centent, writer);
}else if(num==5) {//5. 삭제
System.out.print("삭제할 글번호:");
int nbno = sc.nextInt(); //user로부터 글번호를 입력받아 nbno변수에 저장
ntBoardDAO.delNotice(nbno);
}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
public void 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;
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);
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. addNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
}
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//4.수정 - 글번호 nbno, title 제목, centent 내용, 작성자명 writer
public void 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;
// 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);
int resultcnt = pstmt.executeUpdate(); //--> 위에서 이미 sql을 매개변수로 받아서 처리 하였으므로 매개변수 없는 것으로 처리한다.
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. updateNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
}
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
// ======================================================================================================================
//5.삭제 - nbno 글번호
public void delNotice(int nbno) {
System.out.println("delNotice()진입 nbno="+nbno);
PreparedStatement pstmt = null;
Connection conn = null;
// 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);
int resultcnt = pstmt.executeUpdate();
System.out.println("4.쿼리실행결과 리턴받은 row수="+resultcnt);
} catch (SQLException e) {
e.printStackTrace();
}
//5.반납
System.out.println("5. delNotice() 메소드 자원반납 진행");
JdbcUtil.close(pstmt);
// JdbcUtil.close(rs);
JdbcUtil.close(conn);
}
}
'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.11.29 java & DB(Oracle) 연동_3 (0) | 2023.02.20 |
22.11.25 java & DB(Oracle) 연동 및 콘솔 출력 (0) | 2023.02.16 |
22.11.24 java & DB(Oracle) 연동 (0) | 2023.02.15 |