일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 유스케이스 다이어그램
- Python
- 카카오맵
- Set
- 카카오 오븐
- Usecase Diagram
- database
- Oracle 오류
- Java
- python 기초
- 매일 타자연습
- tuple
- SQL
- Jupyter Notebook
- oracle 11g
- The Network Adapter could not establish the connection
- 데이터베이스 접속
- SEQUENCE
- Oracle 18c
- 자바
- oracle
- 10fastfingers.com
- CSV
- Kakao Oven
- Kakao 지도 API
- 카카오맵 API
- MySQL
- typing test
- ORA-1017
- SQL Developer
- Today
- Total
Another Brain
23일차(6월 18일)_ JDBC Programming 2 , Pattern 본문
## Design Pattern : JDBC 패턴 프로그래밍
## MVC Pattern
=> Model : Business Logic, DAO, DTO 클래스
=> View : Presentation Logic, UI(CUI, GUI)
=> Controller : 요청제어 클래스
## Controller 클래스의 역할 및 절차
1. 요청 파악 : 회원가입요청, 로그인요청 등
2. 요청 데이터 가져오기
3. 요청 데이터 검증
4. Model에게 요청 처리의뢰
5. 요청결과(응답) 받아서 응답화면 제어(이동)
## DTO Pattern : Data Transfer Object
=> 데이터를 가지고 n/w 통해서 이동하는 객체
=> 테이블당 한개의 클래스로서 테이블의 구조참조
=> 컬럼 매핑되도록 멤버변수 선언
=> 설계규칙: encapsulation, 직렬화객체(implements java.io.Serializable)
## DAO Pattern :
=> Dat Access Object
=> 데이터베이스에 대한 crud 로직 구현 클래스
=> 테이블 스키마와 매핑되게 작성
=> Singleton pattern 적용해서 설계
## Singleton Pattern
=> 하나의 클래스에 대해서 단일객체(single instance) 사용
=> 규칙 :
1. private 생성자
2. public static 클래스이름 getInstance() {
return instance;
}
3. private static 클래스이름 instance = new 클래스이름();
=> 사용 :Singleton Pattern 클래스 사용
클래스이름 instance = 클래스이름.getInstance();
=> [실급] DeptDao 클래스에 singleton pattern 적용해서 변경하세요.
## Factory Pattern
-- DAO Pattern (Singleton Pattern)
-- connection 반환 메서드
-- colose 자원해제 메서드
-- 클래스이름 : FactoryDao
-- 1. jdbc property : driver, url, user, password
-- 2. 생성자 : driver 로딩
=> singleton pattern
=> instance 변수
=> getInstance() 메서드
-- 3. getConnection() : Connection
-- 4. 자원해제
=> insert, update, delete(cud) : Statement/PreparedStatement, Connection
=> select : ResultSet, Statement/PreparedStatement, Connection
=> close(Statement, Connnection)
=> close(ResultSet, Statement, Connnection)
## JDBC 프로그래밍 절차 ##
1. JDBC driver 로딩
2. db 서버연결 : url, user, password => Connection
3. 연결된 서버와 통로 개설 => Statement, PreparedStatement, CallableStatement
4. 통로이용 sql 실행 요청
5. 실행결과 처리
6. 자원해제
## JDBC 관련 property : driver, url db벤더에서 결정
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
또는 = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "계정이름";
String password = "계정비밀번호";
## JDBC 프로그래밍 절차 : java.sql.* ##
1.
Class.forName(driver);
throws ClasNotFoundException 처리
2.
-- JDBC 관련 : throws SQLException 처리
Connection conn = DriverManager.getConnection(url, user, password);
3.
// 동적 sql 수행 통로 : 실행시에 CRUD sql 지정
Statement stmt = conn.createStatement();
// 정적 sql 수행 통로 : 통로 개설시에 sql 전용 지정 => 실행시에 값을 설정한 후에 실행 요청
PreparedStatement stmt = conn.prepareStatement("insert int table values(?, ?,?)");
4. C, R, U, D
// C U D => 레코드 추가, 변경, 삭제 => 수행결과 적용된 레코드 수 반환
int rows = stmt.executeUpdate(sql);
// R => 조회 => 결과 여러개(0~n) 반환
ResultSet rs = stmt.executeQuery(sql);
// 기타등등 : ddl ==> 직접 어플리케이션에서 ddl 목적으로 사용하지는 않음(보안문제)
boolean result = stmt.execute(sql);
5. select 결과처리 : ResultSet
-- next():boolean => 다음 cursor 이동 => 레코드 결과존재 유무 및 커서이동
-- 현재 커서(레코드)의 컬럼단위로 데이터 추출 : getXxx(조회컬럼인덱스번호), getXxx("컬럼명")
-- 자바는 인덱스 시작이 0번부터 이지만, DB는 인덱스가 1번부터 시작 *****
-- DB 숫자 => getInt(String):int , getInt(int):int
-- DB 문자 => getString()
-- DB date => getString() / getDate()
-- String => char ===> charAt(index번호) : char
6.
rs.close();
stmt.close();
conn.close();
## test
## 사용자 데이터 입력
문자열 => sql문자열 변환메서드 =
public String covertSqlString(String data) {
}
♬TIP
>> ERROR : Cannot invoke close() on the primitive type int
Line 406 - rs.close(); =>rows.close(); : 오류
Line 406 - 삭제 : 해결
rows가 이미 반환되어 끝났기 때문
>> ERROR : Type mismatch: cannot convert from Statement to PreparedStatement
Line 66 - PreparedStatement => Statement : 해결
## spring 프레임워크를 할 때 이해를 돕기 위해 패턴에 대해 알고있어야함.
'P > SQL' 카테고리의 다른 글
[Oracle] 시퀀스(Sequence) (0) | 2021.09.02 |
---|---|
[Oracle] ORA-01031: insufficient privileges 오류 해결 (0) | 2021.08.27 |
22일차 (6월 16일)_ JDBC Programming - R = select (0) | 2021.06.17 |
SQL mission 2 (0) | 2021.06.16 |
21일차(6월 16일)_ TCL, JOIN, 집합연산자, VIWE (0) | 2021.06.16 |