본문 바로가기
java

22.11.25 java & DB(Oracle) 연동 및 콘솔 출력

by SoulMania 2023. 2. 16.

221125-j.zip
0.01MB
DMLex01.java
0.01MB
SelectEx01.java
0.00MB
UpdateEx01.java
0.00MB
설명.txt
0.04MB


package db; //변수선언->입력->작업->출력

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");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("ClassNotFoundException발생 e=");
        e.printStackTrace();
    }//문제가 왜 발생이 됐는지 원인에 대한  트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !



    //2. 연결 Connection 얻기

// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}

    //3. 객체준비 - Statement객체, PreparedStatement객체

    //4. 쿼리 실행

    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념
    try {
        if(conn!=null){
            conn.close();     //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
        }                    //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
        System.out.println("5. 자원반납 진행");
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

}


package db; //변수선언->입력->작업->출력

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

//scott의 emp테이블에 데이터입력 작업을 위한 클래스이다.
//Statement객체를 이용한 insert문 실행
public class InsertEx01 {

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;
    Statement stmt =null;



    //1. JDBC Driver등록
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("ClassNotFoundException발생 e=");
        e.printStackTrace();
    }//문제가 왜 발생이 됐는지 원인에 대한  트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !


    //2. 연결 Connection 얻기

// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}

    //3. 객체준비 - Statement객체

    try {
        stmt = conn.createStatement();
        System.out.println("3. 객체 준비 완료!");
    } catch (SQLException e1) {
        e1.printStackTrace();
    }

    //4. 쿼리 실행
    //query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!
    int eno = 9004;
    String empName = "이강인";
    int salary = 3000;
    double commission = 1500; //1500.0
    String sql =     "insert into emp(empno, ename, job, hiredate, sal, comm)" + 
                    "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";

// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    //executeUpdate()메소드를 호출하면
    //주어진 SQL문(insert, update, delete)이 실행되고
    //실행된 레코드수가 리턴된다.
    //executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴

    try {
        int resultCnt = stmt.executeUpdate(sql);
        System.out.println("4. 쿼리문 실행!!");
        System.out.println("쿼리문 실행결과로 받은 record 수 = "+resultCnt);
    } catch (SQLException e1) {
        System.out.println("executeUpdate()실행관련 에러");
        e1.printStackTrace();
    } //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!



    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
    try {
        if(stmt!=null) {
            stmt.close();
        }
        if(conn!=null) {
            conn.close();     //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
        }                    //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
        System.out.println("5. 자원반납 진행");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}


package db; //변수선언->입력->작업->출력

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

//scott의 emp테이블에 데이터입력 작업을 위한 클래스이다.
//PreparedStatement객체를 이용한 insert문 실행
public class InsertEx02 {

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;
    Statement stmt =null;
    PreparedStatement pstmt=null;


    //1. JDBC Driver등록
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("ClassNotFoundException발생 e=");
        e.printStackTrace();
    }//문제가 왜 발생이 됐는지 원인에 대한  트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !


    //2. 연결 Connection 얻기

// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}

    //3. 객체준비 - PreparedStatement객체
    String sql =     "insert into emp(empno, ename, job, hiredate, sal, comm)" + 
                    "values(?, ?, ?, sysdate, ?, ?)";

// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    try {
        //stmt = conn.createStatement();
        pstmt =  conn.prepareStatement(sql);  //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
        System.out.println("3. 객체 준비 완료!");
    } catch (SQLException e1) {
        e1.printStackTrace();
    }

    //4. 쿼리 실행
    //query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!

// int eno = 9004;
// String empName = "이강인";
// int salary = 3000;
// double commission = 1500; //1500.0
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    //executeUpdate()메소드를 호출하면
    //주어진 SQL문(insert, update, delete)이 실행되고
    //실행된 레코드수가 리턴된다.
    //executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴

    try {
        //int resultCnt = stmt.executeUpdate(sql);

        //PreparedStatement 객체를 실행하기전에 (executeUpdate() 혹은 executeQuery()
        //?개수만큼 set설정해야한다.
        //set데이터타입 (?순서, 값);
        pstmt.setInt(1, 9004);
        pstmt.setString(2, "이강인");
        pstmt.setString(3, "관리자");
        pstmt.setInt(4, 3300);
        pstmt.setInt(5, 1555);
        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 문이면 리턴 없음!


    //프리페어드 스테이트먼트 사용시  입력값 변수 선언 필요 없이 set메소드로 세팅해주면 되고 sql 값을 3단계에서 미리 받기 때문에 4단계에서는 필요가 없이 그냥 빈()값으로 실행한다.


    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
    try {
        if(pstmt!=null) {
            pstmt.close();
        }

// if(stmt!=null) {
// stmt.close();
// }
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}

}


package db; //변수선언->입력->작업->출력

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

//scott의 emp테이블에 데이터삭제 작업을 위한 클래스이다.
//PreparedStatement객체를 이용한 delete문 실행
public class DeleteEx {

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;
    Statement stmt =null;
    PreparedStatement pstmt=null;


    //1. JDBC Driver등록
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("ClassNotFoundException발생 e=");
        e.printStackTrace();
    }//문제가 왜 발생이 됐는지 원인에 대한  트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !


    //2. 연결 Connection 얻기

// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}

    //3. 객체준비 - PreparedStatement객체
    String sql =     "delete from emp " +
                    "where empno= ?";

// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    try {
        //stmt = conn.createStatement();
        pstmt =  conn.prepareStatement(sql);  //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
        System.out.println("3. 객체 준비 완료!");
    } catch (SQLException e1) {
        e1.printStackTrace();
    }

    //4. 쿼리 실행
    //query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!

// int eno = 9004;
// String empName = "이강인";
// int salary = 3000;
// double commission = 1500; //1500.0
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    //executeUpdate()메소드를 호출하면
    //주어진 SQL문(insert, update, delete)이 실행되고
    //실행된 레코드수가 리턴된다.
    //executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴

    try {
        //int resultCnt = stmt.executeUpdate(sql);

        //PreparedStatement 객체를 실행하기전에 (executeUpdate() 혹은 executeQuery() )
        //?개수만큼 set설정해야한다.
        //set데이터타입 (?순서, 값);
        pstmt.setInt(1, 9004);

// pstmt.setString(2, "이강인");
// pstmt.setString(3, "관리자");
// pstmt.setInt(4, 3300);
// pstmt.setInt(5, 1555);
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 문이면 리턴 없음!

    //프리페어드 스테이트먼트 사용시  입력값 변수 선언 필요 없이 set메소드로 세팅해주면 되고 sql 값을 3단계에서 미리 받기 때문에 4단계에서는 필요가 없이 그냥 빈()값으로 실행한다.


    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
    try {
        if(pstmt!=null) {
            pstmt.close();
        }

// if(stmt!=null) {
// stmt.close();
// }
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}

}


package db; //변수선언->입력->작업->출력

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

//scott.emp에 update를 실행하는 클래스이다.
public class UpdateEx01 {

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;
    PreparedStatement pstmt=null;



    //1. JDBC Driver등록
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("ClassNotFoundException발생 e=");
        e.printStackTrace();
    }//문제가 왜 발생이 됐는지 원인에 대한  트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !



    //2. 연결 Connection 얻기

// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}

    //3. 객체준비 - Statement객체, PreparedStatement객체
    String sql =     "update emp " +
                    "set job=?, sal=?, deptno=? " + 
                    "where empno=?";
    //위의 sql문을 아래 try문 안으로 넣어도 된다.
    try {
        pstmt = conn.prepareStatement(sql);
        System.out.println("3. prepareStatement 객체 생성");

    //4. 쿼리 실행 Set데이터타입(?의 순서, 세팅할 값)

;

        pstmt.setString(1, "개발");
        pstmt.setInt(2, 5000);
        pstmt.setInt(3, 97);
        pstmt.setInt(4, 9003);
        int resultCnt = pstmt.executeUpdate();
        System.out.println("4. 쿼리실행결과 리턴받은 row수="+resultCnt);
    } catch (SQLException e1) {
        e1.printStackTrace();
    }



    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념
    try {
        if(pstmt!=null) { //먼저 in 한것이 나중에 out하는 스택개념
            pstmt.close();
        }
        if(conn!=null){
            conn.close();     //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
        }                    //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
        System.out.println("5. 자원반납 진행");
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

}


package db; //변수선언->입력->작업->출력

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; // java.util.Date; 가 java.sql.Date; 보다 상위 클래스이다.

//scott의 emp테이블에 데이터조회 작업을 위한 클래스이다.
//PreparedStatement객체를 이용한 select문 실행
public class SelectEx01 {

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;
    Statement stmt =null;
    PreparedStatement pstmt=null;
    ResultSet rs =null; //select 쿼리문의 실행결과 집합을 저장하기 위한 변수선언 및 초기화


    //1. JDBC Driver등록
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        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();
    }


    //3. 객체준비 - PreparedStatement객체
    String sql =     "select empno, ename, job, hiredate, sal " + 
                    "from emp " + 
                    "where empno=?";

// String sql = "select empno, ename, job, hiredate, sal as "sss" " + --->별칭 사용 시
// "from emp " +
// "where empno=?";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    try {
        //stmt = conn.createStatement();
        pstmt =  conn.prepareStatement(sql);  //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
        System.out.println("3. 객체 준비 완료!");


    //4. 쿼리 실행
    //query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!

// int eno = 9004;
// String empName = "이강인";
// int salary = 3000;
// double commission = 1500; //1500.0
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    //executeUpdate()메소드를 호출하면
    //주어진 SQL문(insert, update, delete)이 실행되고
    //실행된 레코드수가 리턴된다.
    //executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴


        //int resultCnt = stmt.executeUpdate(sql);

        //PreparedStatement 객체를 실행하기전에 (executeUpdate() 혹은 executeQuery() )
        //?개수만큼 set설정해야한다.
        //set데이터타입 (?순서, 값);
        pstmt.setInt(1, 7934);

        //executeUpdate() : insert, update, delete실행
        //executeQuery() : select 실행
        rs = pstmt.executeQuery();
        System.out.println("4. 쿼리문 실행 결과");
        //if문 이용

// if(rs.next()) { //rs.next()는 다음행(new row)있으면 true리턴
// System.out.println("4-1. select 결과가 있습니다.");
// }else {
// System.out.println("4-2. select 결과가 없습니다.");
// }
while(rs.next()) { //rs.next()는 다음행(new row)있으면 true리턴
//rs.get데이터타입(select 컬럼순서) 첫번째 컬럼은 1, 두번쨰 컬럼은 2
//rs.get데이터타입("컬럼명 또는 컬럼별칭")
int eno = rs.getInt(1);
// int eno = rs.getInt("empno");
System.out.println(eno);

            String ename = rs.getString(2);

// String ename = rs.getString("ename");
System.out.println(ename);

            String job = rs.getString(3);

// String job = rs.getString("job");
System.out.println(job);

            String date1 = rs.getString(4); //String이나 date나 타입 모두 가능
            Date date2 = rs.getDate(4);

// String date = rs.getString("hiredate");
System.out.println(date1);
System.out.println(date2);

            int sal1 = rs.getInt(5);
            double sal2 = rs.getDouble(5); //--->실수형태로 바꿔도 된다.

// int sal = rs.getInt("sal");
// int sal = rs.getInt("sss"); //별칭 사용 시
System.out.println(sal1);
System.out.println(sal2);
}
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!

    //프리페어드 스테이트먼트 사용시  입력값 변수 선언 필요 없이 set메소드로 세팅해주면 되고 sql 값을 3단계에서 미리 받기 때문에 4단계에서는 필요가 없이 그냥 빈()값으로 실행한다.


    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
    try {
        if(rs!=null) {
            rs.close();
        }
        if(pstmt!=null) {
            pstmt.close();
        }

// if(stmt!=null) {
// stmt.close();
// }
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}

}


package db; //변수선언->입력->작업->출력

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; // java.util.Date; 가 java.sql.Date; 보다 상위 클래스이다.

//scott의 emp테이블에 전체사원목록 조회 작업을 위한 클래스이다.
//PreparedStatement객체를 이용한 select문 실행

public class SelectEx02 {

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;
    Statement stmt =null;
    PreparedStatement pstmt=null;
    ResultSet rs =null; //select 쿼리문의 실행결과 집합을 저장하기 위한 변수선언 및 초기화


    //1. JDBC Driver등록
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("1. JDBC Driver 등록  - 성공");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        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();
    }


    //3. 객체준비 - PreparedStatement객체
    String sql =     "select empno, ename, job, hiredate, sal "+
                    "from emp";

// String sql = "select empno, ename, job, hiredate, sal as "sss" " + --->별칭 사용 시
// "from emp " +
// "where empno=?";

    try {
        //stmt = conn.createStatement();
        pstmt =  conn.prepareStatement(sql);  //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
        System.out.println("3. 객체 준비 완료!");


    //4. 쿼리 실행
    //query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!

// int eno = 9004;
// String empName = "이강인";
// int salary = 3000;
// double commission = 1500; //1500.0
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";

    //executeUpdate()메소드를 호출하면
    //주어진 SQL문(insert, update, delete)이 실행되고
    //실행된 레코드수가 리턴된다.
    //executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴


        //int resultCnt = stmt.executeUpdate(sql);

        //PreparedStatement 객체를 실행하기전에 (executeUpdate() 혹은 executeQuery() )
        //?개수만큼 set설정해야한다.
        //set데이터타입 (?순서, 값);
        //pstmt.setInt(1, 7934);   -->물음표가 없는 쿼리이므로 해당 코드 주석처리!
        //위의 코드를 놔두면 java.sql


        //executeUpdate() : insert, update, delete실행
        //executeQuery() : select 실행
        rs = pstmt.executeQuery();
        System.out.println("4. 쿼리문 실행 결과");
        //if문 이용

// if(rs.next()) { //rs.next()는 다음행(new row)있으면 true리턴
// System.out.println("4-1. select 결과가 있습니다.");
// }else {
// System.out.println("4-2. select 결과가 없습니다.");
// }
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 문이면 리턴 없음!


    //프리페어드 스테이트먼트 사용시  입력값 변수 선언 필요 없이 set메소드로 세팅해주면 되고 sql 값을 3단계에서 미리 받기 때문에 4단계에서는 필요가 없이 그냥 빈()값으로 실행한다.


    //5. 자원반납  --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
    try {
        if(rs!=null) {
            rs.close();
        }
        if(pstmt!=null) {
            pstmt.close();
        }

// if(stmt!=null) {
// stmt.close();
// }
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}

}


package db;

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작업
public class DMLex01 {

//필드
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 DMLex01() {} //기본생성자 - 매개변수가 없는 생성자

//메소드

    //1. JDBC Driver등록 & 2. 연결 Connection 얻기

// [접근제한자] [제어자] 리턴유형 메소드명(매개변수리스트) {}
// public Connection dbConnection() { //리턴 유형을 void에서 밑에 return = conn;을 선언해줘야하니 Connection으로 수정
public void dbConnection() { //리턴 유형을 void에서 밑에 return = conn;을 선언해줘야하니 Connection으로 수정
//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) {
    //객체생성
    DMLex01 obj = new DMLex01();



    //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.insertEmp(9010, "김민재", "사원", 2789, 1234);

    System.out.println(); //빈줄
    System.out.println("----------------------아래는 사원목록 조회------------------------- ----");

    //사원목록조회
    obj.selectEmpList();

    //사원정보수정

    //특정사원조회

    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 끝


//자원반납
//상위클래스명 참조변수 = 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) {
    System.out.println("insertEmp()진입 empNo = "+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);

    String sql =     "insert into emp(empno, ename, job, hiredate, sal, comm)" + 
                    "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);
        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 static void updateEmp(int empNo, String ename, String job, int pay, int comm) {}

//삭제
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.selectEmp()의 pstmt 자원반납");
        } catch (SQLException e) {
            e.printStackTrace();
        }



}//selectEmpList 끝

//특정사원조회

// public void selectEmp(매개변수) {}

}





'java' 카테고리의 다른 글

22.12.02 java & DB(Oracle) 연동_5  (0) 2023.02.20
22.11.29 java & DB(Oracle) 연동_3  (0) 2023.02.20
22.11.24 java & DB(Oracle) 연동  (0) 2023.02.15
22.11.16 Collection Framework_2  (0) 2023.02.15
22.11.15 Collection Framework  (0) 2023.02.15