JSP 18. JDBC

zhyun·2020년 12월 11일
0

JspSpring

목록 보기
23/39

복습

jquery가 갖고 있는 function
selecting을 한 element가 갖고 있는 function
하나의 함수를 실행하다 보면 단계적인 스코프를 참조한다

  • 스코프 참조 순서
    블럭 -> 지역변수 -> 현재함수가 실행되고 있는 함수 안에 변수들을 합치면 클로저 -> 글로버스코프
  • 퍼사드 패턴

드라이버에 대한 사용방법은 다 통일되어야한다.
DB가 오라클이였다가 mysql로 바뀌게되더라도 코드를 다 수정해야하는 상황을 막기위해서.
어플리케이션에 대한 인터페이스만 참조한다.
실행코드의 캡슐화라는 구조
서비스 다오 구현할때 인터페이스를 구현했을 것이다.
인터페이스의 사용목적은?
인터페이스를 사용했을 때 얻을 수 있는 장점?
레이어를 쪼개면서 이것에 대해 해볼것임
드라이버를 찾고 빌드패스에 추가
드라이버는 버츄얼머신이 갖고있는 시스템은 아님
그래서 드라이버로딩하는 과정이 필요함 -- 커넥션 생성
배달부역할 - 쿼리객체 - statement
statement를 썼을 때 문제점도 파악할 예정
그다음 쿼리 실행 단계 -- 데이터를 가져오는 목적
조회메서드와 수정메서드로 나뉜다. 결과집합을 가져올것이냐 로우카운트를 가져올것이냐로 나뉜다는 것이다.
resultset -- 순서가 없고 포인터는 있는데 index가 없다
결과집합을 가져와서 놀고나서 close 끊어줘야한다
다음클라이언트가 서버를 사용할 수 있도록 가용자원을 돌려줘야한다.


2020.12.11 금요일

단일책임 원칙에 따라 '책임분리' 목적으로 수업 진행할 예정
SOLID (S라는 녀석과 I라는 녀석을 살펴볼 예정)
다형성의 원리

모델1으로 만든 jdbcDesc.jsp를 모델2로 만들거야
controller는 servlet으로 따로 뺄거고 jsp는 view로 뺄꺼야
1.요청 받고 2.모델데이터만들어낼건데 3.(jdbc)결과집합이 돌아오면 모델데이터 만들어내서 4. 어떤 뷰를 쓸것인지 선택 5.뷰로 이동하는 방법
모델데이터를 만들어내는 부분을 별도로 분리시킬 수 있다.
또다른 객체를 만들어서 한다. -- DAO
서비스녀석이 왜 필요한지 볼 예정

jdbcDesc.jsp 들어있는 08번 폴더를 view폴더로 옮김으로써 모델1방식을 사용할 수 없고 모델2로 만들어야한다


07번 폴더가 있는데 왜 404가 뜨는지

false를 true로 바꿈

바꾸고 돌리면 이 jsp로 가라는 뜻



비동기검색기능
controller단에서 마샬링만 잘하면된다
다오는 건드릴 필요가 없다

계층형구조 정리

과제

이메일 이름 계정관리 map을 활용
데이터베이스 활용 방식
데이터베이스 테이블
테이블 구조에 맞춰서 vo를 설계
다오에 구현체를 새로 만들어서 데이터베이스 접근


/webStudy02_Maven/webapp/WEB-INF/views/08/jdbcDesc.jsp

  • DataBaseProperty 디비에 있는 정보 검색해서 가져오기

kr.or.ddit.db.ConnectionFactory

  • 아래 과정이 있음
    Factory Object[Method] Pattern
    1. driver를 빌드패스에 추가
    2. driver loading
  • 문자열로 특정 클래스의 네임을 보여주면 해당 클래스를 반환해줌
  • 클래스가 로딩이 될 때 이 코드블럭은 생성자 다음에 실행되는 부분
  • 드라이버 클래스를 메모리 공간에 로딩 객체가 아니라 클래스다! 한번만 로딩하면 되는데 그 시점은 커넥션 생성하기 전 시점!
	static{//클래스가 로딩이 될때 이 코드블럭은 생성자 다음에 실행되는 부분, 객체를 생성해야지만 사용할 수 있다.
		//커넥션이 만들어져야한다 (오라클,mysql..등 어떤 DB에 대한 커넥션일수도 있다)
		ResourceBundle bundle= ResourceBundle.getBundle("kr.or.ddit.db.dbInfo");
		String driverClassName = bundle.getString("driverClassName");
		url = bundle.getString("url");
		user = bundle.getString("user");
		password = bundle.getString("password");
		try {
			Class.forName(driverClassName);
			//드라이버클래스를 메모리 공간에 로딩 --객체가 아니라 클래스 , 한번만 로딩하면 되는데 그 시점은 커넥션 생성하기 전 시점으로 빼야한다?
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		}	
	}
  • 위에서 쓴 ResourceBundle 객체에 가져온 properties에 driverClassName,url,user,password가 있다
  • 다른 DB 커넥션으로 바뀔 시 이부분만 수정하면 된다.
driverClassName = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@localhost:1521:xe
user = zhyun
password = java

3. Connection 생성

  • 메모리에 들어가있는 드라이버를 이용할때 사용하는 것이 DriverManager
  • 커넥션의 리턴타입은 Connection
    드라이버 사용방법을 정의한 인터페이스가 java.sql드라이버는 이를 구현하기만 하면 됨 퍼사드 인터페이스임..
  • 오라클, mysql..등 어떠한 DB에 대한 커넥션일수도 있다
  • conn이 배달부 역할
public static Connection getConnection() throws SQLException {
	//3.Connection 생성 
	Connection conn = DriverManager.getConnection(url, user, password);
	return conn;
}

4.Query 객체 생성
1) Statement
2) PreparedStatement
3)CallableStatement
구현체는 driver가 가짐 (driver는 dao와 db의 매개체 역할?)
Statement stmt = conn.createStatement();

5.Query 실행
1) 조회 ResultSet executeQuery() Queryfor~DML(데이터 조작 쿼리)
결과집합을 단번에 가져올 수는 없음. next로 포인트를 옮겨가야됨.
2) 수정 int excuteUpdate() 가져올 수 없기 때문에 실행만. int값이 반환됨.

6.ResultSet활용
ResultSet은 while문, for등으로 next로 긁어왔다.

7.자원해제(close)

profile
HI :)

0개의 댓글