JSP jdbc 연동, DAO, DTO, Connection, Statement, ResultSet, execute (230727)

이원건·2023년 7월 27일
0

JSP

목록 보기
4/5
post-thumbnail

1. 아래를 프로그래밍 하시오.

  • DTO = dept Dto 클래스

    package edu.globalin.ex.dto;
    
    //Name                                      Null?    Type
    //----------------------------------------- -------- ---------------
    //DEPTNO                                    NOT NULL NUMBER(2)
    //DNAME                                              VARCHAR2(14)
    //LOC                                                VARCHAR2(13)
    public class DeptDTO {
    	private int deptno;
    	private String dname;
    	private String loc;
    	
    	public DeptDTO() {
    	}
    	
    	public DeptDTO(int deptno, String dname, String loc) {
    		this.deptno = deptno;
    		this.dname = dname;
    		this.loc = loc;
    	}
    
    	@Override
    	public String toString() {
    		return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
    	}
    
    	public int getDeptno() {
    		return deptno;
    	}
    	public void setDeptno(int deptno) {
    		this.deptno = deptno;
    	}
    	public String getDname() {
    		return dname;
    	}
    	public void setDname(String dname) {
    		this.dname = dname;
    	}
    	public String getLoc() {
    		return loc;
    	}
    	public void setLoc(String loc) {
    		this.loc = loc;
    	}
    }
  • DAO = dept Dao 클래스

    package edu.globalin.ex.dao;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    
    import edu.globalin.ex.dto.DeptDTO;
    
    public class DeptDAO {
    	private String driver = "oracle.jdbc.OracleDriver";
    	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
    	private String uid = "scott";
    	private String upwd = "tiger";
    	
    	public DeptDAO() {
    		try {
    			// DAO 객체 생성 시 driver를 올림
    			Class.forName(driver);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    	public List<DeptDTO> getDeptList(){
    		Connection conn = null;
    		PreparedStatement pstmt =null;
    		ResultSet rs = null;
    		List<DeptDTO> deptList = new ArrayList<>();
    		String sql = "select * from dept";
    		try {
    			conn = DriverManager.getConnection(url, uid, upwd);
    			pstmt = conn.prepareStatement(sql);
    			rs = pstmt.executeQuery();
    			while(rs.next()) {
    				DeptDTO dept = new DeptDTO();
    				dept.setDeptno(rs.getInt("deptno"));
    				dept.setDname(rs.getString("dname"));
    				dept.setLoc(rs.getString("loc"));
    				deptList.add(dept);
    			}
    		} catch (Exception e) {
    			System.out.println("connection 에러");
    		} finally {
    			try {
    				rs.close();
    				pstmt.close();
    				conn.close();		
    			} catch (Exception e) {
    				System.out.println("close 에러");
    			}
    		}
    		return deptList;
    	}
    	
    }
  • dept_select.jsp ->dept 테이블에 있는 내용을 전부 유저에게 출력하여
    보여주는 페이지

    <%@page import="edu.globalin.ex.dto.DeptDTO"%>
    <%@page import="java.util.List"%>
    <%@page import="edu.globalin.ex.dao.DeptDAO"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html lang="ko">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Insert title here</title>
    </head>
    <body>
    <%
      List<DeptDTO> deptList = dao.getDeptList();
      
      for(DeptDTO d: deptList){
        out.print(d + "<br/>");
      } 
    %>
    </body>
    </html>

2. 아래의 개념을 설명하시오.

  • DAO

Data Access Object로 JDBC를 통해 db와 연결을 직접 수행해주는 객체. 여기다 DB연결성 작업에 대한 programming

  • DTO

Data Transfer Object로 DB에서 받아올 객체를 미리 클래스화 해 객체를 생성해둔 후 데이터를 받아 객체 형태로 주고받는 것


3. 아래의 3종 세트를 설명하시오.

  • Connection

DriverManager 클래스에 있는 connection을 얻어와 db와 connect해 작업을 수행하기 위해 미리 정해둔 interface. db회사에서는 이 interface를 구현해 java쪽에 driver 형태로 제공한다.

  • Statement(PreparedStatement)

sql을 받는 단계. connection 객체 안에 있는 preparedStatement 메소드에 sql문을 매개변수로 넣는다.
sql을 매개변수로 넣을 때 sql 문장 안에 변수가 되는 부분을 ?로 표시한 후에
preparedStatment에 있는 해당하는 타입을 set해준다.

  • ResultSet

praparedStatment에 있는 executeQuery()를 실행해주면 그게 ResultSet 형태로 반환된다.
row단위로 cursor형태로 return되며 next()method를 실행한 후 해당 row에 값이 있으면 true를 return해주며 커서가 다음 줄로 바뀐다.
없으면 false를 return하기 때문에 while()안에 조건으로 넣으면 값이 없을 때 까지 다음 값을 확인할 수 있다.


4. Statement객체에 두함수의 용도는?

  • executeQuery() :
conn.prepareStatement(sql);

위와 같이 Statement에 입력된 sql문을 실행하는 역할.

  • executeUpdate() :

몇개가 update됐는지 해당 개수를 int타입으로 return


0개의 댓글