자바 day30 [데이터베이스 연결 풀, 봄 JDBC : JDBC 템플릿]

첫 번째 장에서는   데이터베이스 연결 풀

1. 개념 : 실제로, 컨테이너 (모음), 저장 용기 데이터베이스 연결.
좋은 시스템 초기화, 컨테이너가 생성되면, 컨테이너는 완성에 대한 사용자 액세스 한 후, 연결 개체는 컨테이너에 반환됩니다, 사용자가 컨테이너에서 연결 개체를 얻을 수있는 데이터베이스에 액세스 할 수있는 연결 개체의 일부 적용됩니다.

2. 장점 :
1. 절약 자원
2. 사용자 액세스 및 효율적인

3. 구현 :
데이터 소스 javax.sql의 패키지 : 1. 표준 인터페이스
1. 방법 :
* 연결 가져 오기 다음의 getConnection ()을
* 반환 연결 :의 Connection.close (). 연결 개체 연결이 연결 풀에서 얻을 경우, 당신은 연결을 종료하지 않습니다,의 Connection.close () 메서드를 호출합니다. 그러나 반환 연결

2. 일반적으로, 우리는 달성하기 위해 데이터베이스 벤더가, 그것을 실현하지 않는
데이터베이스 연결 풀 기술 : 1. C3P0
2. 드루이드 : 데이터베이스 연결 풀 구현 기술, 알리바바에 의해 제공이

4. C3P0 : 데이터베이스 연결 풀링
* 단계 :
1. 가져 오기 항아리 패키지 (2 개) c3p0-0.9.5.2.jar mchange - 가공 - 자바-0.2.12.jar는
* 데이터베이스 드라이버 항아리 패키지 가져 잊지 마세요
2. 정의를 프로필 :
* 이름 : c3p0.properties-config.xml에 나 C3P0
* 경로 : 직접 src 디렉토리에있는 파일에.

3. 핵심 오브젝트 데이터베이스 연결 풀 개체 ComboPooledDataSource 만들기
getConnection의 : 4. 연결하기
: * 코드
// 데이터베이스 연결 풀 개체를 만듭니다.
신규 새로운 DS = () 데이터 소스 ComboPooledDataSource를
// 연결 개체를 얻을 2.
연결 ds.getConnection 코네티컷 주 = ( )
5. 드루이드 : 알리 바바가 제공하는 데이터베이스 연결 풀 구현 기술,
1 단계 :
1. 수입 1.0.9.jar 항아리 패키지 드루이드
2. 사용자 정의 프로필 :
* 속성의 형태
* 어떤 이름을 호출 할 수 있습니다, 그것은 임의의 디렉토리에 배치 할 수 있습니다
3. 부하 구성 파일. 등록 정보
4. 데이터베이스 연결 풀 객체 : DruidDataSourceFactory에 의해 공장에 도착하는
연결을 획득 5. 다음의 getConnection
* 코드 :
//로드 프로필 3.
등록 정보 프로 새 새 = 속성 ();
InputStream 인 DruidDemo.class.getClassLoader는 = (). 같이 getResourceAsStream ( "druid.properties");
pro.load는 (IS)
.. 4 // 객체 연결 풀 얻기
DS = DruidDataSourceFactory.createDataSource 데이터 소스 (프로)
.. 5 // 얻을 연결
연결 ds.getConnection 코네티컷 주 = ();
2. 클래스 정의 도구
1. 클래스 JDBCUtils 정의
, 2. 정적 코드 블록로드 구성 파일을 제공하는 연결 풀 개체를 초기화
방법을 제공하는
접속 수단을 얻었다 : 1. 데이터베이스 연결 풀을 통해 연결 취득
2. 리소스 해제
3. 연결 풀을 얻는 방법

* 코드 :
공용 클래스 JDBCUtils {

// 멤버 변수 데이터 소스 정의
개인 데이터 소스 정적 DS를,

정적 {
은 try {
//로드 프로파일 1
등록 프로 새로운 새 속성 = ()
. Pro.load (JDBCUtils.class.getClassLoader ()을 같이 getResourceAsStream ( "을 druid.properties ")는)
// 2는 데이터 소스 취득
, DS = DruidDataSourceFactory.createDataSource (프로)
} 캐치 (IOException이 E) {
e.printStackTrace ();
} 캐치 (예외 E) {
; e.printStackTrace을 ()
}
}

/ **
* 연결하기
* /
공공 정적 연결 getConnection의 ()가 발생되는 SQLException {
반환 ds.getConnection ();
}

/ **
* 발표 자료
* /
공공 정적 무효 가까운 (문 STMT, 연결 코네티컷) {
/ * 경우 (STMT = 널!) {
{시도
) (stmt.close을;
} 캐치 (예외 : SQLException 전자) {
e.printStackTrace ();
}
}

경우 (코네티컷 주 = 널!) {
{시도
) conn.close을 (; //归还连接
} 캐치 (의 SQLException 전자) {
e.printStackTrace를 ();
}
} * /

닫기 (NULL, STMT 코네티컷);
}

 공공 정적 무효 가까운 (의 ResultSet rs는 문 STMT, 연결 CONN) {

(! RS = null가) {경우
{시도
) (rs.close을;
} 캐치 (예외 : SQLException 전자) {
e.printStackTrace ();
}
}

IF (STMT = 널!) {
은 try {
stmt.close ();
} 캐치 (예외 : SQLException E) {
e.printStackTrace ();
}
}

(! 코네티컷 주 = NULL) {IF
은 try {
// 반환 conn.Close () 연결
캐치 (예외 : SQLException E) {}
e.printStackTrace ();
}
}
}

/ **
* 가져 오기 연결 풀
* /

공공 정적 getDataSource 데이터 소스 () {
DS를 반환;
}

}

제 II   봄 JDBC

* 스프링 프레임 워크 간단한 패키지 JDBC. 단순화 된 JdbcTemplate을 대상 JDBC 개발을 제공하는 것은
* 단계 :
1. 가져 오기 항아리 패키지
2. JdbcTemplate을 개체를 만듭니다. 데이터 소스에 의존 데이터 소스
* JdbcTemplate과 JdbcTemplate과 새로운 새로운 템플릿 = (DS);

3. 전화 JdbcTemplate을 방법은 CRUD 작업이 수행하는
DML 문을 실행할 : * 갱신 (). 문을 변경, 삭제, 추가
* queryForMap () : 쿼리 결과는지도 세트, 열쇠로 열 이름, 설정이 패키지를 넣어 맵으로 기록 된 값의 값으로 패키지 설정 결과
* 참고 :이 방법은 쿼리 결과의 길이를 설정합니다 단지 1.
* queryForList () : 결과 세트리스트 캡슐화의 조회 결과 세트
* 참고 :지도에 설정 한 각 패키지 레코드 목록에로드 한 후 설정지도 세트
* 쿼리 () : 쿼리 결과, 결과 자바 빈즈로 캡슐화
RowMapper의 : * 쿼리 매개 변수를
우리가 일반적으로 BeanPropertyRowMapper 구현 클래스를 사용 *. 자바빈 데이터는 자동 포장을 완료
* 새로운 BeanPropertyRowMapper는 <타입> (타입을 .class)는
조회 결과의 결과를 감싸 오브젝트 *의 queryForObject는
중합에 * 일반적 조회 함수

4. 운동 :
* 요구 사항 :
1. 검토 1 위 연봉 데이터 만
2. 기록을 추가
기록 방금 추가 삭제
지도의 세트로 패키지 4. 쿼리 ID 기록 (1),
(5) 쿼리 모든 레코드를, 목록으로 패키지
6. 모든 레코드 개체의 집합으로 목록 EMP를 포장됩니다 쿼리
기록 쿼리 7. 총 수를

* 코드 :

가져 오기 cn.itcast.domain.Emp,
가져 오기 cn.itcast.utils.JDBCUtils,
가져 오기 org.junit.Test,
가져 오기 org.springframework.jdbc.core.BeanPropertyRowMapper,
가져 오기 org.springframework.jdbc.core.JdbcTemplate;
org.springframework.jdbc.core.RowMapper 가져 오기,

가져 오기 java.sql.Date,
가져 오기의 java.sql.ResultSet;
가져 오기 java.sql.SQLException의,
가져 오기를 java.util.List;
가져 오기 java.util.Map;

공용 클래스 JdbcTemplateDemo2 {

//의 JUnit 단위 테스트 독립적 실행 방법을 허용

// 얻을 JdbcTemplate와는 오브젝트
, 새로운 템플릿 = (JDBCUtils.getDataSource은 ()) 새로운 JdbcTemplate과 JdbcTemplate과 개인
/ **
10000 * 1. 검토 1 위 연봉 데이터
* /
@Test
공공 무효 TEST1 () {

// 2 정의 SQL
문자열 SQL = "급여 SET의 EMP를 업데이트 WHERE ID = = 1001 10000";
. // 3 실행 SQL.
INT의 COUNT = template.update (SQL)
에서 System.out.println (COUNT);
}

/ **
* 2. 추가 기록
* /
@Test
공개 무효 TEST2 () {
문자열 SQL = "(위에서 ID, ENAME, DEPT_ID 언급 한) 값 (,, ???) EMP INTO 삽입",
INT의 COUNT = template.update (SQL 1015 "구오 징" 10)
에서 System.out.println (COUNT);

}

/ **
* 3 단지 레코드를 삭제 추가
* /
@Test
공공 무효 테스트 3은 () {
; 문자열 SQL = "하여 위 = ID를 언급 한 곳에서 삭제 EMP"
Int 수 COUNT = template.update (SQL, 1015)
;에서 System.out.println (COUNT)
}

/ **
* 4. 쿼리 지도의 세트로 패키지 ID를 기록 1001
* 참고 :.에서만 할 수 있습니다 결과 세트를 조회하려면이 방법의 길이 1
* /
@Test
공공 무효 TEST4 () {
문자열 = SQL "EMP ID = ID 또는 SELECT * FROM? = ";?
지도 <문자열, 개체> = template.queryForMap지도 (SQL, 1001, 1002)
에서 System.out.println (지도);
// {위에서 언급 한 id = 1001, ENAME = 원숭이 왕, 작업 ID = 4, MGR = 1004 , joindate = 2000년 12월 17일은 급여 = 10000.00 보너스 = NULL, 20} = DEPT_ID이다

}

/ **
* 5 목록으로 패키지 된 질의 모두 기록
* /
@Test
공개 무효 Test5 () {
문자열 SQL = "EMP SELECT * FROM";
목록 <지도 <문자열, 객체 >> 목록 = template.queryForList (SQL);

(지도 <문자열, 개체> stringObjectMap : 목록)에 대한 {
에서 System.out.println (stringObjectMap);
}
}

/ **
* 6查询所有记录,将其封装为EMP를对象的목록集合
* /

@Test
공공 무효 TEST6 () {
문자열 SQL = "EMP SELECT * FROM";
리스트 <EMP를 목록> = template.query (SQL 새로운 RowMapper의 <EMP를> () {

@Override
공개 EMP를 인 mapRow (ResultSet의 중계국, 난을 INT)되는 SQLException {발생
EMP를 EMP = 새로운 EMP를 ();
INT 자료 = rs.getInt을 ( "ID")
문자열 ENAME = rs.getString ( "ENAME");
INT 작업 ID = rs.getInt ( "작업 ID");
INT MGR = RS.
날짜 joindate = rs.getDate ( "joindate");
이중 급여 = rs.getDouble ( "급여");
더블 보너스 = rs.getDouble ( "보너스");
INT DEPT_ID = rs.getInt ( "DEPT_ID");

emp.setId (ID);
emp.setEname (ENAME);
emp.setJob_id (작업 ID);
emp.setMgr (MGR);
emp.setJoindate (joindate);
emp.setSalary (급여);
emp.setBonus (보너스);
emp.setDept_id (DEPT_ID);

EMP를 반환;
}
});

(EMP EMP를 : 목록)에 대한 {
에서 System.out.println (EMP);
}
}

/ **
모든 레코드에 대한 쿼리 목록 EMP를 개체의 집합으로 포장됩니다 * 6
* /

@Test
공공 무효 test6_2 () {
문자열 SQL = "SELECT * EMP부터";
일람 <EMP가> = template.query 목록 (SQL 새로운 새 BeanPropertyRowMapper <EMP를> (Emp.class));
(EMP EMP를리스트) {대
에서 System.out.println (EMP)
}
}

/ **
* 기록 쿼리 (7)의 총 개수
* /

@Test
공공 무효 TEST7 () {
"EMP에서 SELECT COUNT (ID)"문자열 = SQL,
긴 총 = template.queryForObject (SQL, Long.class)
시스템. Out.println (총);
}

}

추천

출처www.cnblogs.com/xuweng/p/11245715.html