JDBC 템플릿 사용
쿼리문을 변경해야한다면 - > DAO query 담아둔 변수를 수정
-> 소스코드를 재컴파일 -> 재컴파일된 프로그램을 배포
쿼리문의 경우는 외부파일에 작성을 하고 작성된 파일을 읽어와서 처리
HashMap : 키랑 값을 쌍으로 이용하는 컬렉션
-> 키는 중복이 되지 않고(Set 속성)
-> 값은 중복이 가능(List 속성)
properties : 키랑 값을 String 타입으로 제한한 Map 형태의 컬렉션
-> .properties(확장자) 파일을 읽어올때 사용
.properties 파일 : 옵션정보, 데이터베이스 정보, 다국어정보를 기록하여 텍스트 파일로 활용
-> 주로 변경이 잦은 문자열을 저장하여 관리
-> 키와 값이 '=' 기호로 연결되어 있는 텍스파읽 , ISO 8859-1 문자셋으로 저장되고, 한글은 유니코드로
변환되어 저장됨!
DB 연결 정보를 driver.properties 파일에 기록하여 연결하기
@데이터베이스 모델링 목적
- 연관 조직의 정보에 대한 정확한 이해를 할 수 있다.
- 사용자, 설계자, 개발자 간의 효율적인 의사소통 수단을 제공
- 데이터 베이스의 중복된 데이터를 방지 할 수 있음
- 데이터 체계 구축을 통한 고품질 S/W와 유지보수 비용 감소 효과를 기대 할 수 있음
@데이터 모델링 절차
1. 개념 데이터 모델링
-> 필요한 데이터를 수집하는 과정
2. 논리 데이터 모델링
-> 수집된 데이터를 어떻게 관리할지 -> 테이블을 어떻게 묶어서 사용할지
3. 물리 데이터 모델링
-> 논리적으로 설정한 테이블 상세항목 설정 -> 테이블명, 컬럼명, 데이터타입, 제약조건 등등
4. 데이터 베이스 구축
-> 모델링 된 데이터를 실제 쿼리문을 통해서 생성
@@ 커넥션 풀(Connection Pool)
-> 데이터 베이스 연결과정(Connection)은 실제로 굉장히 무거운 작업
-> JDBC 템플릿 통해서 중복된 코드는 제거가 되었지만, 실제 연결과정이 줄어들지 않음
-> 데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool) 에 저장해두고 필요한 경우 풀에서 가져와서
사용하고, 다시 반환하는 기법!!
<JDBC Template>
package org.kh.common;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCTemplate {
public JDBCTemplate() {
}
// Connection 객체 생성 메소드
//static 정적변수!
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "mvc", "1234");
// 자동으로 commit을 지원해주는 기능을 해제
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.close(); // 만약의 경우대비
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 커밋용 메소드
public static void commit(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.commit();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void rollback(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.rollback();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// stmt , pstmt, rset
// 얘네도 객체화 해줘야됨!
public static void close(Statement stmt) {
try {
if (stmt != null && !stmt.isClosed()) {
stmt.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// public void close(PreparedStatement pstmt) {
// try {
// if (pstmt != null && !pstmt.isClosed()) {
// pstmt.close();
// }
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// 지우는 이유는 다형성 때문에 stmt 를 만들었기 때문에 지워도 된다!!!!!!!!!!!!
public static void close(ResultSet rset) {
try {
if (rset != null && !rset.isClosed()) {
rset.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'이공계전문기술연수 > Database' 카테고리의 다른 글
<이공계전문기술연수> 7. JDBC(Java Database Connectivity) (0) | 2019.11.22 |
---|---|
<이공계전문기술연수> 6. DB (INDEX , DECLARE) (0) | 2019.09.05 |
<이공계전문기술연수> 5. DB 실습 (0) | 2019.09.04 |
<이공계전문기술연수> 4. DB (DDL / DML / DCL) (0) | 2019.09.03 |
<이공계전문기술연수> 3. DB 그룹 함수 (0) | 2019.09.02 |