관리 메뉴

프로그래밍 삽질 중

JDBC 설명 및 예제 1) 본문

과거 프로그래밍 자료들/SQL(Oracle)

JDBC 설명 및 예제 1)

평부 2021. 3. 25. 22:32

<현재 자바 프로그래밍 실습 환경>

- 데이터베이스 프로그램 : 오라클 18c

- 자바 컴파일러 JDK 버전 11

- 데이터베이스와 자바를 연결하는 드라이버 JDBC 드라이버(파일이름 ojdbc8.jar)

 

 

※ JDBC

드라이버 로드 - 객체 생성

- 관계형 데이터베이스에 저장된 데이터를 접근 및 조작할 수 있게 하는 API

- 다양한 DBMS애 대해 일관된 API로 데이터베이스 연결, 검색, 수정, 관리 등으로 할 수 있게 함

 

※ JDBC 드라이버

- DBMS마다 고유한 JDBC 드라이버 제공,

JDBC 드라이버와 DBMS는 전용 프로토콜로 데이터베이스 처리

 

※ JDBC 드라이버 매니저

- 자바 API에서 지원하며 JDBC 드라이버 로드

 

 

데이터베이스 접속 자바 클래스 (소스코드)

- 오라클 DBMS내 데이터베이스에서 자바의 데이터베이스 연동 객체

- Class : <클래스이름> JDBC 드라이버 로딩

- DriverManager : 데이터베이스 Connection 객체 생성

 

- Connection

1) SQL문을 실행하는 Statement 객체 생성(Statement createStatement())

2) Connection 객체 연결을 종료(void close())

 

- Statement

1) SQL문을 실행해서 ResultSet 객체를 생성(ResultSet executeQuery(String sql))

2) INSERT/DELETE/UPDATE문을 실행해서 ResultSet 객체 생성 (ResultSet executeUpdate(String sql))

 

- ResultSet

* SQL문 실행 결과를 얻어오기(Fetch( 위해서 ResultSet 클래스 필요

* 현재 데이터의 행(레코드 위치)를 가리키는 커서(cursor)를 관리

* 커서 초기값은 첫 번쨰 행 이전을 가리킴

 

1) 결과 테이블에서 커서가 처음 투플을 가리킴(boolean first())

2) 결과 테이블에서 커서가 다음 투플을 가리팀(boolena next())

3) int가 가리키는 열 값을 정수로 반환(int getInt(<int>)

4) int 가리키는 값을 문자열로 반환(String getString(<int>)

 

※ 주로 사용하는 메소드

- ResultSet executeQuery(String sql) : 특별히 SQL 구분하지 않고 DML(delete, update, insert),

                                                  Query(select), DDL(create, drop) 등 수행

- executeQuery() : 데이터 검색

- executeUpdate() : 추가, 수정, 삭제

 

 

[예제 1] - 자바(이클립스)와 SQL 연결하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class JDBCEX1 {
 
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe""scott""tiger");
            System.out.println("DB 연결 완료");
        } catch(ClassNotFoundException e) {
            System.out.println("JDBC 드라이버 로드 에러");
        } catch (SQLException e) {
            System.out.println("DB 연결 오류");
        }
 
    }
 
}
cs

 

 

[예제 2] - CAFE 테이블의 모든 내용 출력

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
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCEx2_1 { //CAFE 테이블의 모든 내용 출력
                        
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe""scott""tiger");
            
            Statement stmt2 = conn.createStatement();
            
            ResultSet rs2 = stmt2.executeQuery("select * from cafe");
            
            while(rs2.next()) { //출력값 넣는 것 잊지 말기
                System.out.print(rs2.getString("CAFEID"));
                System.out.print(rs2.getString("CAFENAME"));
                System.out.print(rs2.getString("CORPORATION"));
                System.out.println(rs2.getString("PRICE"));
        }
        
            
        } catch(ClassNotFoundException e) {
            System.out.println("JDBC 드라이버 로드 에러");
        } catch (SQLException e) {
            System.out.println("DB 연결 오류");
        }
    }
 
}
cs

 

 

[예제 3] - 특정 열(CAFENAME, PRICE)만 검색하기

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
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCEx3_1 {//특정 열(cafename, price)만 검색
                        //
 
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe""scott""tiger");
            
            Statement stmt3 = conn.createStatement();
            
            ResultSet rs3 = stmt3.executeQuery("select cafename, price from cafe");
            
            while(rs3.next()) { //출력값 넣는 것 잊지 말기
                System.out.print(rs3.getString("cafename"));
                System.out.println(rs3.getString("price"));
        }
        
            
        } catch(ClassNotFoundException e) {
            System.out.println("JDBC 드라이버 로드 에러");
        } catch (SQLException e) {
            System.out.println("DB 연결 오류");
        }
 
    }
 
}
 
cs

 

 

[예제 4] - 조건 검색하기(CAFEID가 50인 내용)

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
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCEX4_1 {//조건 검색(CAFEID가 50인 내용 검색
 
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe""scott""tiger");
            
            Statement stmt4 = conn.createStatement();
            
            ResultSet rs4 = stmt4.executeQuery("select CAFEID, CAFENAME from CAFE "
                                                + "where CAFEID = 50");
            
            while(rs4.next()) { //출력값 넣는 것 잊지 말기
                System.out.print(rs4.getString("CAFEID"));
                System.out.println(rs4.getString("CAFENAME"));
        }
        
            
        } catch(ClassNotFoundException e) {
            System.out.println("JDBC 드라이버 로드 에러");
        } catch (SQLException e) {
            System.out.println("DB 연결 오류");
            }
 
    }
 
}
 
cs

 

 

[예제 5] - (예제4와 동일) cafe 테이블의 이름이 "이디야인"인 카페 데이터를 출력하기

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
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCEx5_1 {
 
    public static void main(String[] args) {
        
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe""scott""tiger");
            
            Statement stmt5 = conn.createStatement();
            
            ResultSet rs5 = stmt5.executeQuery("select * from cafe " + //줄 바꿈 시 띄어쓰기 
                                                "where cafename = '이디야'");
 
            while(rs5.next()) {
                System.out.print(rs5.getString("cafeid"));
                System.out.print(" " + rs5.getString("cafename"));
                System.out.print(" " + rs5.getString("corporation"));
                System.out.println(" " + rs5.getString("price"));
            }
        } catch(ClassNotFoundException e) {
            System.out.println("JDBC 드라이버 로드 에러");
        } catch (SQLException e) {
            System.out.println("DB 연결 오류");
            }
 
 
    }
 
}
 
cs

 

 

[예제 6] - 레코드 추가, 수정, 삭제

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
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCEx6_1 {//레코드 추가, 삭제
 
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe""scott""tiger");
            
            Statement stmt6 = conn.createStatement();
            
            //레코드 추가
            //stmt6.executeUpdate("INSERT INTO CAFE VALUES"
            //        + "("+45+", \'쥬씨\', \'쥬씨주식회사\', "+2000+")");
            
            
            //데이터 수정 
            //stmt6.executeUpdate("update CAFE set cafename = '커피베이' where cafeid =45");
            //ResultSet rs6 = stmt6.executeQuery("select * from cafe");
 
            //데이터 삭제 - 안 될경우 SQL의 트리거에서 오류 삭제
            stmt6.executeUpdate("delete from cafe where cafename = '커피베이'");
            ResultSet rs6 = stmt6.executeQuery("select * from cafe");
            
            while(rs6.next()) {
                System.out.print(rs6.getString("cafeid"));
                System.out.print(" " + rs6.getString("cafename"));
                System.out.print(" " + rs6.getString("corporation"));
                System.out.println(" " + rs6.getString("price"));
            }
        } catch(ClassNotFoundException e) {
            System.out.println("JDBC 드라이버 로드 에러");
        } catch (SQLException e) {
            System.out.println("DB 연결 오류");
            }
 
 
    }
 
}
 
cs