Java

[Java] JDBC (Java Database Connectivity)

소댓 2023. 3. 30. 17:48

* JDBC(Java Database Connectivity)

: 자바 프로그램에서 sql을 실행하기 위해 데이터베이스를 연결해주는 응용프로그램 인터페이스

 

- JDBC를 통해 데이터 베이스 제어 가능

- JDBC 인터페이스를 발표하면, 자사 제품과 호환되게끔 할 수 있도록 구현해서 모은 클래스인 JDBC 드라이버를 발표함

 

* db 연결하는 순서

1. 변수 선언

2. JDBC 드라이버 로딩 되어 있는지 여부 체크

3. 연결(Connection)

4. SQL문 작성

5. 문장 객체 생성

6. 실행(SELECT ==> ResultSet)

7. 레코드 별로 로직을 처리

8. 자원반납

 

< oracle 사용 >

C:\app\(사용자이름)\product\11.2.0\dbhome_1의 ojdbc6.jar라는 파일을

dev의 새 폴더 myDriver에 복사하기

basic - build path - add libaries - user library - user libaries 버튼 - myLib 추가

- add external jars - 추가

 

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
package day21;
// JDBC(Java Database Connectivity) : 자바 프로그램에서 sql을 실행하기 위해 
// 데이터베이스를 연결해주는 응용프로그램 인터페이스
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx01 {
public static void main(String[] args)  {
 
        // * db 연결하는 순서
        // 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;
        
        // 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

 

 

<MYSQL>

mysql 다운 받아서 mydrive 폴더에 jar파일 복사

 

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 day21;
// JDBC(Java Database Connectivity) : 자바 프로그램에서 sql을 실행하기 위해 
// 데이터베이스를 연결해주는 응용프로그램 인터페이스
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBCEx02 {
public static void main(String[] args)  {
 
        // 아마존 서버 연결해서 사용!
    
        // * 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"; // 대문자로 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