Java

[Java] JDBC - 데이터 베이스 (SELECT, INSERT, UPDATE, DELETE) / 시퀀스(SEQUENCE) 활용 / (+MYSql)

소댓 2023. 3. 31. 18:16

[JDBC] 활용

 

<SELECT>

 

* 사원의 급여가 1500 이상인 사원의 사번, 이름, 급여 > 이클립스 콘솔에 출력 

  : SELECT 활용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package day22;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
// 사원의 급여가 1500 이상인 사원의 사번, 이름, 급여 > 이클립스 콘솔에 출력
public class JDBCEx3 {
 
    public static void main(String[] args) {
        
        
        // 1. 변수 선언
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String user = "scott";
        String password = "tiger";
        
        // 변수 미리 선언
        Connection conn = null
        PreparedStatement pstmt = null// 문장객체
        ResultSet rs = null// 데이터베이스에서 실행한 결과를 rs로 넘겨줌
        
        // 2. JDBC 드라이버 로딩되어 있는지 여부 체크
        
        try {
            Class.forName(driver); // 드라이버 잘 됐는지.. 없으면 예외 발생 > try/catch
            // 3. 연결(Connection)
            conn = DriverManager.getConnection(url, user, password); // url, id, pw 가지고 연결
            // SQLException :: 반드시 예외 처리 필요
            System.out.println("conn : "+conn); // 연결 잘되면 conn 변수가 값을 갖게 됨
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
            e.printStackTrace();
        }
        
        // 4. SQL문 작성
        String SQL = "SELECT EMPNO, ENAME, SAL FROM EMP WHERE sal >= 1500";    
        
        try {
            // 5. 문장 객체 생성
            pstmt = conn.prepareStatement(SQL);// sql 문장을 문장 객체로 가져옴 > 예외처리 try/catch
            // 6. 실행 (SELECT ==> ResultSet)
            rs = pstmt.executeQuery(); // 데이터 베이스에서 문장을 실행해서 얻어지는 결과를 가져옴
            // 7. 레코드 별로 로직 처리
            // 모든 결과를 화면에 출력 >> 반복문
            while (rs.next()) { // 결과줄을 아래로 이동시킴..(한줄씩)
//            rs.getInt("컬럼명");
            int empno = rs.getInt("empno");
            String ename = rs.getString("ename");
            int sal = rs.getInt("sal");
            
//            rs.getInt("컬럼번호"); > 이렇게 써도 가능함.. 하지만 코드 해석이 어려움
//            int empno2 = rs.getInt(1); // 컬럼 번호
//            String ename2 = rs.getString(2);
//            int sal2 = rs.getInt(3);
            
            // 두 출력결과 값이 같음
            System.out.println(empno + " : " + ename + " : " + sal);
//            System.out.println(empno2 + " : " + ename2 + " : " + sal2);
            }
            } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally { 
            // 8. 자원반납
            try {
                if(rs!= null) rs.close(); // rs가 널이 아니라면, close
                if(pstmt!= null) pstmt.close();  // pstmt가 널이 아니라면, close
                if(conn!= null) conn.close(); // conn가 널이 아니라면, close
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } //예외처리 > try/catch
        } // try ~ finally end
        
        
    } // main end
// class end
 
cs

 

 

* 부서번호가 10인 부서 사원의 사번, 이름, job을 eclipse 콘솔에 출력

  : SELECT 활용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package day22;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
// 부서번호가 10인 부서 사원의 사번, 이름, job을 출력
 
public class JDBCEx4 {
    public static void main(String[] args) {
    
 
        // 1. 변수 선언
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String user = "scott";
        String password = "tiger";
        
        // 변수 미리 선언
        Connection conn = null// 연결
        PreparedStatement pstmt = null// 문장 객체
        ResultSet rs = null// 결과 저장 
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver); // 드라이버 있는지 > 예외처리 try/catch
            // 3. 연결(Connection)
            // url, user, password에 연결 
            conn = DriverManager.getConnection(url, user, password);
            // ㄴ SQL 예외처리 필요
            System.out.println("conn : "+conn); // 확인용
            } catch (ClassNotFoundException e) {
                System.out.println("드라이버 로딩 실패");
                e.printStackTrace();
            } catch (SQLException e) {
                System.out.println("DB 연결 실패");
                e.printStackTrace();
            } 
    
            // 4. SQL문 작성
            String SQL = "SELECT EMPNO, ENAME, JOB FROM EMP WHERE DEPTNO = 10";
                
            // 5. 문장 객체 생성
            try {
                pstmt = conn.prepareStatement(SQL); // SQL 문장을 문장 객체로 가져옴
                // 6. 실행(SELECT ==> ResultSet)
                rs = pstmt.executeQuery(); // 데이터베이스의 결과값 저장
                
                // 7. 레코드 별로 로직을 처리
                while(rs.next()) { // 다음 줄 가져오기 > 반복문
                int empno = rs.getInt("empno");
                String ename = rs.getString("ename");
                String job = rs.getString("job");
                
                System.out.println(empno + " : "+ename+" : "+job);
                }
            
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
            // 8. 자원반납
                try {
                    if(rs!= null) rs.close();
                    if(pstmt!= null) pstmt.close();
                    if(conn!= null) conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        
// main end
// class end
 
cs

 

 


 

<INSERT>

 

* 부서 테이블에 새로운 부서 1개 추가 (부서명:영업, 위치:서울)


- pstmt.executeQuery();  <= select문에서만 사용!

  int result = pstmt.executeUpdate();  <= INSERT문에서 사용

 

- bind 변수(?) : 입력값는 값 저장 > ? 값 채우는 과정 필요

  String sql = "INSERT INTO dept VALUES (?, ?, ?)";

  pstmt.setInt(1, 99); > 첫번째 물음표는 99 

  pstmt.setString(2, "영업"); > 두번째 물음표는 영업

  pstmt.setString(3, "서울"); > 세번째 물음표는 서울

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package day22;
 
// INSERT
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx5 {
 
    public static void main(String[] args) {
        
        // 가져온 데이터를 db에 넣는 법
        
        // 부서 테이블에 새로운 부서 1개 추가
        // 부서명 : 영업, 위치 : 서울
        
        // 1. 변수 선언
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String username = "scott";
        String password = "tiger";
        
        // 변수 미리 선언
        Connection conn = null// 연결
        PreparedStatement pstmt = null// 문장 객체
        ResultSet rs = null// 결과 저장 
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver);
            //  3. 연결(Connection)
            conn = DriverManager.getConnection(url, username, password);
            System.out.println("conn : "+conn);
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
            e.printStackTrace();
        }
    
        // 4. SQL문 작성
        String sql = "INSERT INTO dept VALUES (?, ?, ?)"// bind 변수(?) : 입력값는 값 저장
            
        // 5. 문장 객체 생성
        try {
            pstmt = conn.prepareStatement(sql);
            // 6. 실행(SELECT ==> ResultSet)
            // ?값 채우기
            pstmt.setInt(199); // 첫번째 물음표는 99
            pstmt.setString(2"영업"); // 두번째 물음표는 영업
            pstmt.setString(3"서울"); // 세번째 물음표는 서울
            
//            pstmt.executeQuery(); // <= select문만 사용!
            int result = pstmt.executeUpdate(); // <= INSERT문 사용
            System.out.println("result : "+result);
            
            // 7. 레코드 별로 로직을 처리 = > 할 거 없음
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally { // 8. 자원반납
            try {
                if (rs != null) rs.close(); // 이번엔 rs는 안해도 ㄱㅊ지만..재사용을 위해
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        
        
    } // main end
    
// class end
 
cs

 

 

- SQLPLUS scott/tiger 로그인하고 추가된 것 확인 <SQL>

 

SQL> select*from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        99 영업           서울
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
         1 A              B
         2 AAA            BBB
         3 AAA            BBB
         4 AAA            BBB

9 개의 행이 선택되었습니다.

 

 

 

 

* 데이터베이스에 시퀀스 생성하고, 데이터 추가하기

  => SEQUENCE는 ORACLE 에서만

 

- 일단 데이터베이스에서 중복 파일 삭제 <SQL>

SQL> DELETE FROM dept
  2  WHERE DEPTNO NOT IN (10, 20, 30, 40);

COMMIT;
-- 커밋까지..

 

- MEMBER 시퀀스 생성 <SQL>

SQL> CREATE SEQUENCE DEPT_DEPTNO
  2  START WITH 1
  3  INCREMENT BY 1
  4  NOCACHE
  5  NOCYCLE
  6  ;

시퀀스가 생성되었습니다.

+ 시퀀스 삭제 방법 참고
SQL> DROP SEQUENCE DEPT_DEPTNO;

 

 

- 데이터 베이스(시퀀스)에 데이터 추가

  시퀀스 사용 > DEPT_DEPTNO.NEXTVAL : 시퀀스가 가진 다음값 실행

 

+ 시퀀스에서는 바인드 변수에서 'NO'는 자동 증가

   String sql = "INSERT INTO dept VALUES (DEPT_DEPTNO.NEXTVAL, ?, ?)";

   pstmt.setString(1, "영업"); 

   pstmt.setString(2, "서울");

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package day22;
 
// INSERT > 시퀀스(DB로 확인)
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx6 {
 
    public static void main(String[] args) {
        
        // 가져온 데이터를 db에 넣는 법
        
        // 부서 테이블에 새로운 부서 1개 추가
        // 부서명 : 영업, 위치 : 서울
        
        // 1. 변수 선언
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String username = "scott";
        String password = "tiger";
        
        // 변수 미리 선언
        Connection conn = null// 연결
        PreparedStatement pstmt = null// 문장 객체
        ResultSet rs = null// 결과 저장 
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver);
            //  3. 연결(Connection)
            conn = DriverManager.getConnection(url, username, password);
            System.out.println("conn : "+conn);
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
            e.printStackTrace();
        }
    
        // 4. SQL문 작성
        // 시퀀스 사용 > DEPT_DEPTNO.NEXTVAL : 시퀀스가 가진 다음값 실행
        String sql = "INSERT INTO dept VALUES (DEPT_DEPTNO.NEXTVAL, ?, ?)"// bind 변수(?) : 입력값는 값 저장
            
        // 5. 문장 객체 생성
        try {
            pstmt = conn.prepareStatement(sql);
            // 6. 실행(SELECT ==> ResultSet)
            // ?값 채우기
//            pstmt.setInt(1, 99);
            pstmt.setString(1"영업"); 
            pstmt.setString(2"서울"); 
            
//            pstmt.executeQuery();
            // <= select문만 사용!
            int result = pstmt.executeUpdate(); // <= INSERT문 사용
            System.out.println("result : "+result);
            
            // 7. 레코드 별로 로직을 처리 = > 할 거 없음
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally { // 8. 자원반납
            try {
                if (rs != null) rs.close(); // 이번엔 rs는 안해도 ㄱㅊ지만..재사용을 위해
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        
        
    } // main end
    
// class end
 
cs

 

 

- INSERT 결과 확인 <SQL>

 

SQL> SELECT * FROM DEPT
  2  ;

    DEPTNO DNAME          LOC
---------- -------------- -------------
         1 영업           서울
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

 

 

 

++)  * 데이터베이스(MySQL)에 데이터 추가하기

 

- MySQL에서는 시퀀스 사용 불가

- SQL 문  : String sql = "INSERT INTO dept (dname, loc) VALUES (?, ?)";

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package day22;
 
// ORACLE
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx6mySQL {
 
    public static void main(String[] args) {
        
        // 가져온 데이터를 db에 넣는 법
        
        // 부서 테이블에 새로운 부서 1개 추가
        // 부서명 : 영업, 위치 : 서울
        
        // 1. 변수 선언
        String driver = "com.mysql.cj.jdbc.Driver";
        // mysql ==> 3306
        String url = "jdbc:mysql://orcl.csf4hsopkyid.ap-northeast-2.rds.amazonaws.com:3306/orcl";
        String username = "scott";
        String password = "tigertiger12";
                
        // 아래에서 예외가 터져 아예 선언부터 안될까봐 미리 변수 선언
        Connection conn = null
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver);
            //  3. 연결(Connection)
            conn = DriverManager.getConnection(url, username, password);
            System.out.println("conn : "+conn);
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
            e.printStackTrace();
        }
    
        // 4. SQL문 작성
        // 시퀀스 사용 > DEPT_DEPTNO.NEXTVAL : 시퀀스가 가진 다음값 실행
        String sql = "INSERT INTO dept (dname, loc) VALUES (?, ?)"// bind 변수(?) : 입력값는 값 저장
        // 번호는 자동 증가라 생략
            
        // 5. 문장 객체 생성
        try {
            pstmt = conn.prepareStatement(sql);
            // 6. 실행(SELECT ==> ResultSet)
            // ?값 채우기
//            pstmt.setInt(1, 99); // 자동 증가라 생략
            pstmt.setString(1"광고"); 
            pstmt.setString(2"도쿄"); 
            
//            pstmt.executeQuery();
            // <= select문만 사용!
            int result = pstmt.executeUpdate(); // <= INSERT문 사용
            System.out.println("result : "+result);
            
            // 7. 레코드 별로 로직을 처리 = > 할 거 없음
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally { // 8. 자원반납
            try {
                if (rs != null) rs.close(); // 이번엔 rs는 안해도 ㄱㅊ지만..재사용을 위해
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        
        
    } // main end
    
// class end
 
cs

 

 

- MYSql에 추가된 데이터 확인

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package day22;
 
// MYSQL(JDBCEx6mysql) 결과 확인
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx7 {
public static void main(String[] args)  {
 
        // MYSQL ==> 아마존 서버 연결해서 사용!
    
        // * db 연결하는 순서
        // 1. 변수 선언
        String driver = "com.mysql.cj.jdbc.Driver";
        // mysql ==> 3306
        String url = "jdbc:mysql://orcl.csf4hsopkyid.ap-northeast-2.rds.amazonaws.com:3306/orcl";
        String username = "scott";
        String password = "tigertiger12";
        
        // 아래에서 예외가 터져 아예 선언부터 안될까봐 미리 변수 선언
        Connection conn = null
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        // jdbc:oracle => jdbc에서 Oracle에 연결한다.
        // thin => 경량 드라이버
        // @접속할서버의IP => @10.11.152.38 
        // localhost => 로컬 컴퓨터 주소
        // 1521 => 통신PORT(오라클과 통신하기 위한 포트)
        //          - 통로: 통신port > 65535
        //             - http: 80 / ftp: 21        
        // orcl => DB name
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver);
            
        // 3. 연결(Connection)
        conn = DriverManager.getConnection(url, username, password);
            System.out.println("conn : "+conn); // 참조값 확인
        
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
        } catch (SQLException e) {
            System.out.println("연결 실패");
            e.printStackTrace();
        } // 예외 처리
        
        
        // 4. SQL문 작성
        String sql = "SELECT * FROM dept";
        
        try {
            // 5. 문장 객체 생성
            pstmt = conn.prepareStatement(sql);
            
            // 6. 실행(SELECT ==> ResultSet)
            rs = pstmt.executeQuery(); // sql문 실행해서 rs(결과 집합)에 넘겨줌
            // 7. 레코드 별로 로직을 처리
            // 반복문으로
            while(rs.next()) { // 다음에 결과가 있으면 true 리턴 > 실행
                int deptno = rs.getInt("deptno"); // 부서번호(deptno) 값 가져오기
                String dname = rs.getString("dname"); // dname 컬럼의 값 가져와서 dname에 할당
                String loc = rs.getString("loc");
                System.out.println("deptno : "+deptno+" : "+dname+" : "+loc);
            }
    
        } catch (SQLException e) {
            e.printStackTrace();
        // 8. 자원반납
        } finally { 
            // 예외가 있던 없던 실행되는 코드
            // close();
            try {
                if(rs!=null)rs.close(); // null이 아닐 때만 close > 안전하게 자원 반납
                if(rs!=null)pstmt.close();
                if(rs!=null)conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        
        
        }
 
}
 
cs

 

 


 

< UPDATE>

 

* dept에서 LOC(위치)와 DEPTNO(부서번호) 업데이트 - 수정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package day22;
 
// UPDATE
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx8 {
 
    public static void main(String[] args) {
 
        
        // 1. 변수 선언
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String username = "scott";
        String password = "tiger";
        
        // 변수 미리 선언
        Connection conn = null// 연결
        PreparedStatement pstmt = null// 문장 객체
        ResultSet rs = null// 결과 저장 
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver);
            //  3. 연결(Connection)
            conn = DriverManager.getConnection(url, username, password);
            System.out.println("conn : "+conn);
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
            e.printStackTrace();
        }
    
        // 4. SQL문 작성
        // 시퀀스 사용 > DEPT_DEPTNO.NEXTVAL : 시퀀스가 가진 다음값 실행
        String sql = "UPDATE dept SET LOC = ? WHERE deptno = ?"// bind 변수(?) : 입력하는 값 저장
            
        // 5. 문장 객체 생성
        try {
            pstmt = conn.prepareStatement(sql);
            // 6. 실행(SELECT ==> ResultSet)
            // ?값 채우기
//            pstmt.setInt(1, 99);
            pstmt.setString(1"부산"); // 첫번째 물음표(loc)은 부산
            pstmt.setInt(220); // 두번째 물음표(부서번호)는 20으로 업데이트
            
//            pstmt.executeQuery();
            // <= select문만 사용!
            int result = pstmt.executeUpdate(); // <= INSERT문 사용
            System.out.println("result : "+result);
            
            // 7. 레코드 별로 로직을 처리 = > 할 거 없음
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally { // 8. 자원반납
            try {
                if (rs != null) rs.close(); // 이번엔 rs는 안해도 ㄱㅊ지만..재사용을 위해
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        
        
    } // main end
    
// class end
 
cs

 

 

* 참고 - 10번 부서의 위치 변경(하고 다시 원래대로 되돌리기) <SQL>

 

SQL> UPDATE dept
  2  SET LOC = '부산'
  3  WHERE deptno = 10;

1 행이 갱신되었습니다.

SQL> -- 10번 부서의 위치 변경
SQL> SELECT * FROM DEPT
  2  ;

    DEPTNO DNAME          LOC
---------- -------------- -------------
         1 영업           서울
        10 ACCOUNTING     부산
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
         2 영업           서울

6 개의 행이 선택되었습니다.

SQL> ROLLBACK;

롤백이 완료되었습니다.

 

 

 

- UPDATE 결과 확인 <SQL>

SQL> SELECT * FROM DEPT;

    DEPTNO DNAME          LOC
---------- -------------- -------------
         1 영업           서울
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       부산
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
         2 영업           서울

6 개의 행이 선택되었습니다.

 

 

-----


 

<DELETE>

 

* dept에서 DEPTNO가 1인 행을 삭제 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package day22;
 
// DELETE
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx9 {
 
    public static void main(String[] args) {
        
        // 1. 변수 선언
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String username = "scott";
        String password = "tiger";
        
        // 변수 미리 선언
        Connection conn = null// 연결
        PreparedStatement pstmt = null// 문장 객체
        ResultSet rs = null// 결과 저장 
        
        // 2. JDBC 드라이버 로딩 되어 있는지 여부 체크
        try {
            Class.forName(driver);
            //  3. 연결(Connection)
            conn = DriverManager.getConnection(url, username, password);
            System.out.println("conn : "+conn);
        } catch (ClassNotFoundException e) {
            System.out.println("드라이버 로딩 실패");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패");
            e.printStackTrace();
        }
    
        // 4. SQL문 작성
        // 시퀀스 사용 > DEPT_DEPTNO.NEXTVAL : 시퀀스가 가진 다음값 실행
        String sql = "DELETE FROM dept WHERE DEPTNO = ?"// bind 변수(?) : 입력하는 값 저장
            
        // 5. 문장 객체 생성
        try {
            pstmt = conn.prepareStatement(sql);
            // 6. 실행(SELECT ==> ResultSet)
            // ?값 채우기
            pstmt.setInt(11); // deptno가 1인 행 삭제
            
//            pstmt.executeQuery();
            // <= select문만 사용!
            int result = pstmt.executeUpdate(); // <= INSERT문 사용
            System.out.println("result : "+result);
            
            // 7. 레코드 별로 로직을 처리 = > 할 거 없음
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally { // 8. 자원반납
            try {
                if (rs != null) rs.close(); // 이번엔 rs는 안해도 ㄱㅊ지만..재사용을 위해
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        
        
    } // main end
    
// class end
 
cs

 

 

- DELETE 결과 확인 <SQL>

 

SQL> SELECT * FROM DEPT;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       부산
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
         2 영업           서울