Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

TMI개발일기

JDBC의 쓰임새 본문

백엔드/JSP&Servlet

JDBC의 쓰임새

JP59 2021. 6. 8. 19:25

JDBC는 JAVA와 DB간의 데이터를 주고 받을 수 있게 해주는 API라이브러리로 DB의 데이터를 바탕으로 JSP에서 화면을 출력할때 연결하는 용도로 많이 사용된다.

 

기본 내장된 API가 아니기 떄문에 lib으로 사용할 프로젝트에 넣어줘야한다.

 

 

구조를 간단하게 그림으로 보자면

 

이런 모양으로

먼저 자바와 DB를 연결할 통로인 Connection을 만들고 DB에 명령할 sql문을 String으로 자바에서 작성한다.

PreparedStatement 로 객체를 만들고 해당 객체에 내가 사용할 sql문을 변수로 넣는다. 

 

이 객체는 어떤 종류의 sql문을 사용했냐에 따라 DB로 가는 명령어가 다른데 

Insert, delete, update와 같이 내가 DB의 내용을 만들고 수정하고 삭제하는 sql 명령어에는 DB에서 값을 다시

받아올 필요가 없다. 따라서 executeUpdate(); 메소드를 사용하고 select 와 같이 DB를 조회해서 내가 그 값을

다시 자바로 받아올 필요가 있는 sql문은 executeQuery();문을 사용한다.(둘다 Connection으로 값을 주고받음)

만약 조회를 한다면 preparedStatement 외에도 ResultSet이라는 객체가 하나 더 필요한데 executeQuery();로 조회한 값을 저장하는 명령어다. 보통 조회 값은 다수이기 때문에 while문과 next()와 같이 사용되며 list에 저장하는 방식을

많이 사용한다.

 

jdbc의 예시 코드를 보자

구동 환경은 java 8 oracle DB를 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class JdbcUtils {
    
    
    //연결기능
    //테이블 종류와 무관하게 전체적을 ㅗ이용해야 하므로  객체의 생성 없이 쉽게 접근하도록 정적 등록
    public static Connection getConnection(String username, String password)throws Exception{
        Class.forName("oracle.jdbc.OracleDriver");
        Connection con = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:xe",username,password);
        
        return con;
        
    }
}
cs

Connection은 자주 사용하기 때문에 static으로 만들어뒀다.

 

 

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
public List<boardDto> boardList(int startRow , int endRow)throws Exception{
        Connection con = jdbcUtils.getConnection();
        
        String sql = "select * from("
                + " select rownum rn,TMP.* from ("
                + " select"
                + " B.*,E.emp_name"
                + " from board B"
                + " inner join employees E on E.emp_no = B.emp_no"
                + " order by bo_date desc"
                + " )TMP"
                + " )where rn between ? and ?";
        
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setInt(1, startRow);
        ps.setInt(2, endRow);
        
        ResultSet rs = ps.executeQuery();
        List<boardDto> list= new ArrayList();
        while(rs.next()) {
            boardDto boarddto = new boardDto();
            boarddto.setBoardNo(rs.getInt("board_no"));
            boarddto.setEmpNo(rs.getString("emp_no"));
            boarddto.setBoTitle(rs.getString("bo_title"));
            boarddto.setBoType(rs.getString("bo_type"));
            boarddto.setBoContent(rs.getString("bo_content"));
            boarddto.setBoCount(rs.getInt("bo_count"));
            boarddto.setBoDate(rs.getString("bo_date"));
            boarddto.setEmpName(rs.getString("emp_name"));
            boarddto.setComComments(rs.getInt("bo_comments"));
            
            list.add(boarddto);
        }
        
        con.close();
        
        return list;
    }
cs