개발새발

10. JDBC - BE 본문

[부스트코스] 웹프로그래밍/DB 연결 웹 앱

10. JDBC - BE

재래김유진 2019. 11. 24. 01:49
728x90
반응형

1) JDBC란?

: JAVA언어를 이용해서 DBMS로 부터 정보를 조회하는 방법.

 

[JDBC 개요]

  • JDBC(Java Database Connectivity)의 정의
    - 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약
    - 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API
    - SQL과 프로그래밍 언어의 통합 접근 중 한 형태
  • JAVA는 표준 인터페이스인 JDBC API를 제공
  • 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 제공한다.

[JDBC 환경 구성]

  • JDK 설치
  • JDBC 드라이버 설치
    - Maven에 다음과 같은 의존성을 추가한다. MySQL사이트에서 다운로드 한다.

난 mysql 버전이 8.0.16이라서 맞춰서 dependency 넣어봤음

1
2
3
4
5
<dependency>   
  <groupId>mysql</groupId>   
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.16</version>
 </dependency>
 
 

 

[JDBC를 이용한 프로그래밍 방법]

  1. import java.sql.*;
  2. 드라이버를 로드 한다.
  3. Connection 객체를 생성한다.
  4. Statement 객체를 생성 및 질의 수행
  5. SQL문에 결과물이 있다면 ResultSet 객체를 생성한다.
  6. 모든 객체를 닫는다

 

2) JDBC실습

 

[ (실습 1 ) Role table에 있는 Date console창에 가져와보기]

1. dto 만들기 

 

2. dao.java

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
 
 
 
public class RoleDao {
    
    private static String dburl = "jdbc:mysql://localhost:3306/connectdb";
    private static String dbUser = "connectuser";
    private static String dbpasswd = "connect123!@#";
 
 
    public Role getRole(Integer roleId) {
        Role role = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
            String sql = "SELECT role_id, description From role Where role_id=?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, roleId);
            rs = ps.executeQuery();
            
            if(rs.next()) {
                int id = rs.getInt(1);
                String description = rs.getString(2);
                role = new Role(id, description);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            if(rs != null) {
                try {
                    rs.close();
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps != null) {
                try {
                    ps.close();
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
             
        }
        
        return role;
    }
}
 
 
 

 

3. role_id가 100인거 확인

근데 에러가 뜬다.

like this,,
마! 맞춰줬따! 됐나!  

 

깰꼼!

 

[(실습 2) Insert와 Select 다른 코드부분 이해]

dao.java에 insert문 addRole 추가 

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
public class RoleDao {
    
    private static String dburl = "jdbc:mysql://localhost:3306/connectdb?serverTimezone=Asia/Seoul";
    private static String dbUser = "connectuser";
    private static String dbpasswd = "connect123!@#";
 
    public int addRole(Role role) {
        int insertCount = 0;
 
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        String sql = "INSERT INTO role (role_id, description) VALUES ( ?, ? )";
 
        try (Connection conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
                PreparedStatement ps = conn.prepareStatement(sql)) {
 
            ps.setInt(1, role.getRoleId());
            ps.setString(2, role.getDescription());
 
            insertCount = ps.executeUpdate();
 
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return insertCount;
    }
 
 

 

insert문 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
public class jdbcExam2 {
    public static void main(String[] args) {
        int roleId = 500;
        String description = "CTO";
        
        Role role = new Role(roleId, description);
        
        RoleDao dao = new RoleDao();
        int insertCount = dao.addRole(role);
 
        System.out.println(insertCount);
    }
}
 
 

 

** try-with-resource : finally로 안닫아줘도 된대.

 

[ (삭제) deleteRole ]

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
public int deleteRole(Integer roleId) {
        int deleteCount = 0;
        
        Connection conn = null;
        PreparedStatement ps = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
            String sql = "DELETE FROM role WHERE role_id = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, roleId);
            deleteCount = ps.executeUpdate();
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            if(ps != null) {
                try {
                    ps.close();
                }catch(SQLException e) {
                    
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                }catch(SQLException e) {
                    
                }
            }
            
        }
        return deleteCount;
    }
 
 

 

jdbcExam4.java - Delete

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
public class jdbcExam4 {
 
    public static void main(String[] args) {
        int roleId=501;
        
        RoleDao dao = new RoleDao();
        int deleteCount = dao.deleteRole(roleId);
        
        System.out.print(deleteCount);
 
    }
 
}
 
 
 

 

[ (수정) updateRole]

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
public int updateRole(Role role) {
        int updateCount = 0;
        
        Connection conn = null;
        PreparedStatement ps = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
            String sql = "UPDATE role SET description = ? WHERE role_id = ?";
            
            ps = conn.prepareStatement(sql);
            
            ps.setString(1, role.getDescription());
            ps.setInt(2, role.getRoleId());
            
            updateCount = ps.executeUpdate();
            
        }catch(Exception ex) {
            ex.printStackTrace();
        }finally {
            if(ps != null) {
                try {
                    ps.close();
                }catch(SQLException e ) {
                    
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                }catch(SQLException e ) {
                    
                }
            }
        }
        return updateCount;
    }
 
 

jdbcExam5.java - Update

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
public class jdbcExam5 {
    public static void main(String[] args) {
        //수정테스트
        int roleId = 500;
        String description = "CEO";
        
        Role role = new Role(roleId, description);
        
        RoleDao dao = new RoleDao();
        int updateCount = dao.updateRole(role);
 
        System.out.println(updateCount);
    } 
}
 
 
728x90
반응형
Comments