[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(1, 99); // 첫번째 물음표는 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(2, 20); // 두번째 물음표(부서번호)는 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(1, 1); // 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 영업 서울
'Java' 카테고리의 다른 글
| [Java] DAO(Data Access Object) / VO(Value Object) (0) | 2023.04.04 |
|---|---|
| [Java] JDBC - 데이터 베이스 활용 (로그인, 회원가입 창 + 중복확인) (0) | 2023.03.31 |
| [Java] JDBC (Java Database Connectivity) (0) | 2023.03.30 |
| [Java] I/O Stream (DataInputStream / ObjectInputStream) + 메모장, 파일 복사기 기능 구현 (0) | 2023.03.29 |
| [Java] I/O Stream (InputStream / OutPutStream) (0) | 2023.03.28 |