Chillax in dev

[JDBC]활용 : JDBC 기초 이해 + insert, select, update, delete 구현 본문

Java 공부/JDBC

[JDBC]활용 : JDBC 기초 이해 + insert, select, update, delete 구현

Seong Story 2020. 7. 14. 00:17
728x90

[JDBC] 활용 01 : JDBC 이해하기 

- JDBC (Java Database Connectivity)는 자바에서 DB에 접근할 수 있도록 하는 자바의 API이다. 참고로 자바 API는 자바를 활용하여 쉽게 원하는 기능들을 구현할 수 있도록 한 클래스 라이브러리의 집합이다. JSP 프로그래밍을 하면서 데이터베이스와 관련된 작업을 처리할 수 있게 한다. 즉 JDBC의 공부법은 의미를 이해하고 잘 가져다 쓰면 장땡이다.

 

-API(Application Programming Interface):응용프로그램 운영페제나 데이터베이스 관리 시스템과 같은 시스템으로 프로그램과 통신할 때 사용되는 언어나 메시지 형식을 가진다.

 

-JDBC 프로그래밍 순서.

  1. JDBC 드라이버를 로딩한다.
  2. 데이터베이스에 연결한다.
  3. SQL 실행을 위한 Statement(또는 PreparedStatement)객체를 생성한다.
  4. SQL을 실행한다.
  5. SQL 실행결과를 받아서 처리한다.
  6. Statement(또는 PreparedStatement)를 종료한다.
  7. 데이터베이스 연결을 종료한다. 

- 우선 공부하기전에 원래 DB에 접근할 때 여러 가지 설정들을 회상해보자.  DB와 connection상태. jar 파일 확인, 드라이버 생성, 등등 이클립스에서 연결을 수동으로 해준후 sql을 동작할 수 있었다. 이번엔 클래스 속에서 이런 DB와의 소통을 하려는 공부이다. 이클립스에선 이러한 초기 세팅과 SQL을 다 명령으로 선언하여 처리해주고 나아가 해당 객체에 값을 전달하고 받아오는 형식으로 말 그대로 DB와 Java의 동작들을 연결하여 사용한다. 아래의 예제들을 보며 암기해도 좋고 템플릿으로 지정하는 것도 좋겠다.

- JDBC 연결하기

  • Connection con : DB와 자바를 연결하는 클래스,
  • url, id, pw ,driver 값 : 이들을 직접 지정해줘야 한다. (보는 방법은 아래에 정리돼있어요!)
  • Class.forName(driver) : 데이터베이스 연결용 드라이버 도구 세팅(선택) , 오라클 드라이버 즉 초반에 설정해주었던 ojdb6.jar 선택한 것 (경로는 아래 정리해두었어요!)
  • con.close() :만약 연결이 끊어진다면 con객 체를 닫아서 마무리한다.
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
package JDBC01;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class JDBC_Connect {
    public static void main(String[] args) {
        //자바에서 지원하는 데이터베이스와 자바의 연결 클래스: Connection 객체
        Connection con = null;
        
        //연결 드라이버 메니저가 연결해준 연결 인스턴스를 con 변수에 저장
        //sql에선 커넥션이랑 이거저거 해줬잖아 그걸 다 명령어로 쳐줘야함.
        String url ="jdbc:oracle:thin:@localhost:1521:xe";
        String id ="scott";
        String pw ="tiger";
        String driver = "oracle.jdbc.OracleDriver";
 
        //con 엔 파라미터로 url(data source source 마우스우 프로퍼티로 가서 커넥션 유알엘 확인)
 id pw 씀 
       try {
            Class.forName(driver); // 에드케치 2번쩨걸로함. 
추가해준단것  드라이브 연결 안됬을 떄 용도 
            con = DriverManager.getConnection(url,id,pw);
            System.out.println("연결성공");
        } catch (SQLException e) {
            System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 연결 정보 오류");
            
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("DB연결 실패 무언가 틀렸다..  드라이버 클래스 파일 오류");
            e.printStackTrace();
        }catch (Exception e) {
            System.out.println("별도의 사유로 연결 실패");
            e.printStackTrace();
        }
        // 만약 연결이 안되게되었다면 열려있는 con객체를 닫아야한다. 
        if(con!= null)
            try {
                con.close();
                System.out.println("데이터베이스가 잘 종료되었다.");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
}
 
cs

- Data source Explorer> Database Connection> xe(생성한 DB) 마우스 우> propertirs> Driver propertirs

 

- 드라이버 연결 오류 시 jar문제 일수 있다. 

추가 경로: C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib


[JDBC] 활용 02 : JDBC  insert, select, update, delete 구현하기!

- 이제 본격적으로 DB에 SQL을 보내보고 결과를 받아오고 Java코드 속에 SQL을 녹이는 방법을 배워보자.

<테이블 생성>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 연습용 table cumtomer 생성 및 삽입!
 
create table customer(
    num number(3),
    name varchar2(10),
    email varchar2(20),
    tel varchar2(15)
);
 
insert into cost values(1,'홍길동','a1@gmail.com','010-5223-2233');
insert into cost values(2,'권성민','a2@gmail.com','010-7227-4532');
insert into cost values(3,'김수완','a3@gmail.com','010-7327-5533');
insert into cost values(4,'정몽주','a4@gmail.com','010-4627-8532');
insert into cost values(5,'유관순','a5@gmail.com','010-7227-8533');
 
select * from customer;
cs

 

<connection 구현>

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
package JDBC01;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBC02_Select {
    public static void main(String[] args) {
      //클래스가 달라지면 연결 다시 해야한다.
      //자바에서 지원하는 데이터 베이스와 자바의 연결 클래스 Connection객체
      Connection con = null;
         //PreparedStatement클래스 
        //데이터 베이스에 sql문을 전송하고 , 결과를 얻어내는 역할을 하는 클래스
       // 항상 con과 같이다니는놈임.
         PreparedStatement pstmt = null;
          //PreparedStatement의 결과를 받아 저장하는 클래스 ->ResultSet
         ResultSet rs =null;
                        
          //연결 드라이버 메니저가 연결해준 연결 인스턴스를 con 변수에 저장
        //sql에선 커넥션이랑 이거저거 해줬잖아 그걸 다 명령어로 쳐줘야함 자바는
            String url ="jdbc:oracle:thin:@localhost:1521:xe";
         String id ="scott";
            String pw ="tiger";
           String driver = "oracle.jdbc.OracleDriver";
                        
        try {
         Class.forName(driver); // 에드케치 2번쩨걸로함. 추가해준단것  드라이브 연결 안됬을 떄 용도 
          con = DriverManager.getConnection(url,id,pw);
          System.out.println("연결성공");
    String sql= "select * from cost";
          //con과 pstmt를sql 명령과 함께 연결합나다.
           pstmt =con.prepareStatement(sql);
          rs=pstmt.executeQuery(); //select만씀
          //rs.next(); //rs.next();
// 다음 레코드로 이동하라! 다음레토드가 있다면 트루 아님폴스 리턴 다음 레코드의 유무 할 수 있다.
          System.out.println("번호\t이름\t이메일\t\t전화번호");
          System.out.println("----------------------------------------");
          while(rs.next()) { //레코드가 있음 계속 반복
               int num =rs.getInt("num");
               String name = rs.getString("name");
               String email =rs.getString("email");
               String tel = rs.getString("tel");
               System.out.printf("%d\t%s\t%s\t%s\n",num,name,email,tel);
                                
                }
            } catch (SQLException e) {
           System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 연결 정보 오류");
                            
               e.printStackTrace();
             } catch (ClassNotFoundException e) {
           System.out.println("DB연결 실패 무언가 틀렸다..  드라이버 클래스 파일 오류");
           e.printStackTrace();
            }catch (Exception e) {
           System.out.println("별도의 사유로 연결 실패");
           e.printStackTrace();
              }
              // 만약 연결이 안되게되었다면 열려있는 con객체를 닫아야한다. 
          try {
               if(con!= null)con.close();
               if(pstmt!= null)pstmt.close(); //각각의 객체도 닫아줘야함
               if(rs!= null)rs.close();// 각가의 객체도 닫아줘야함.
              System.out.println("데이터베이스가 잘 종료되었다.");
           } catch (SQLException e) {
           // TODO Auto-generated catch block
            e.printStackTrace();
     }
 
    }        
}
 
 
cs

 

<insert 구현>

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
package JDBC01;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
 
public class JDBC_Insert {
    public static void main(String[] args) {
    Connection con = null;
    PreparedStatement pstmt = null;
        try {
            Class.forName("oracle.jdbc.OracleDriver"); 
            con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
            System.out.println("연결성공");
            
            Scanner sc =new Scanner(System.in);
            System.out.printf("저장할 번호를 입력하세요: ");
            String num = sc.nextLine();
            
            System.out.printf("이메일을 입력하세요: ");
            String name = sc.nextLine();
            
            System.out.printf("이름을 입력하세요: ");
            String email = sc.nextLine();
            
            System.out.printf("전화번호를 입력하세요: ");
            String tel = sc.nextLine();
            
            //그러난 이는 옛날 구식의 방법으로 값을 입력받아 넣는방법이다.
           //    String sql = "insert into cost values("+num +"," + name +"," + email +"," + ","+tel+")" ;
            
            //아래가 요즘방식
            String sql = "insert into cost values(?,?,?,?)"//? 는prepareStatement 가 알아봐요
            pstmt =con.prepareStatement(sql);
            pstmt.setInt(1,Integer.parseInt(num)); // 테이블의 데이터타입에 뭦춰주는것 잊지마.
            pstmt.setString(2,name);
            pstmt.setString(3,email);
            pstmt.setString(4,tel);
            
            int result = pstmt.executeUpdate();
            if(result ==1System.out.println("inset 저장 성공!");
            else System.out.println("저장 실패");
            
        } catch (SQLException e) {
            System.out.println("DB 연결 실패 무언가 잘못됬다.. 드라이버 연결 정보 오류");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("DB 연결 실패 무언가 잘못됬다..  드라이버 클래스 파일 오류");
            e.printStackTrace();
        }catch (Exception e) {
            System.out.println("별도의 사유로 연결 실패");
            e.printStackTrace();
            
        }try {//con!= null 열린다.
                if(con!= null)con.close();
                if(pstmt!= null)pstmt.close();
                System.out.println("데이터베이스가 잘 종료되었다.");
            } catch (SQLException e) {
            }
        
        
    }
}
 
cs

<update 구현>

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
package JDBC01;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
 
public class JDBC_Update {
 
    public static void main(String[] args) {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:xe";
        Connection con = null;
        
        PreparedStatement pstmt = null;
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, "scott""tiger");
            // System.out.println("데이터베이스 연결 성공~~~");
            Scanner sc = new Scanner(System.in);
            System.out.print("수정할 회원의 번호를 선택하세요: ");
            String num = sc.nextLine();
            System.out.print("수정할 항목을 선택하세요. 1.이메일 2.전화번호");
            String input = sc.nextLine();
            String sql = null;
            switch (input) {
            case "1":
                System.out.print("수정할 이메일을 입력하세요: ");
                String email = sc.nextLine();
                sql = "update cost set email=? where num=?";
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1, email);
                pstmt.setInt(2, Integer.parseInt(num));
                break;
            case "2":
                System.out.print("수정할 전화번호을 입력하세요: ");
                String tel = sc.nextLine();
                sql = "update cost set tel=? where num=?";
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1, tel);
                pstmt.setInt(2, Integer.parseInt(num));
                break;
            }
 
            int result = pstmt.executeUpdate();
            if (result == 1)
                System.out.println("수정 성공 ~");
            else
                System.out.println("수정 실패 ㅠ");
 
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (pstmt != null)
                pstmt.close();
            if (con != null)
                con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
 
    }
 
}
 
cs

<delete 구현>

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
package JDBC01;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
 
public class JDBC_Delete {
    public static void main(String[] args) {
        Connection con = null;
        PreparedStatement pstmt = null;
            try {
                Class.forName("oracle.jdbc.OracleDriver"); 
                con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
                System.out.println("연결성공");
        Scanner sc = new Scanner(System.in);
        System.out.println("삭제할 번호 를입력하세요");
        int num =sc.nextInt();
        String sql = "delete from customer where num=?";
        pstmt= con.prepareStatement(sql);
        pstmt.setInt(1, num);
        pstmt.executeUpdate();
            
    
            }catch (SQLException e) {
                System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 연결 정보 오류");
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                System.out.println("DB연결 실패 무언가 틀렸다..  드라이버 클래스 파일 오류");
                e.printStackTrace();
            }catch (Exception e) {
                System.out.println("별도의 사유로 연결 실패");
                e.printStackTrace();
            }
            try {
                if(pstmt!= null)pstmt.close();
                if(con!= null)con.close();
                System.out.println("데이터베이스가 잘 종료되었다.");
            } catch (SQLException e) {
                e.printStackTrace();
            }
    }    
}
 
cs
728x90
LIST

'Java 공부 > JDBC' 카테고리의 다른 글

[JDBC] JDBC 프로그래밍 익숙하게 하기  (0) 2020.10.16
Comments