DBCP( DatatBase Connection Pool)
DBCP란?
- 서비스에 Connection을 요구하는 동시접속자가 과포화 되었을 때,
DBMS의 Down을 방지하는 기술
- 미리 생성된 인스턴스의 대여 및 반환 기법으로, 접속자 대기 시간은 발생할 수 있으나,
DBMS는 정상 운행됨
pool = 커넥션들이 모여있는 울타리
dbcp 라이브러리 사용해서 커넥션 만들기
> 커넥션을 지정한 개수 만큼 만들어놓고 사용자들이 커넥션 요청할 때 빌려줬다가 돌려받음
> 먼저 사용한사람이 다시 돌려놓을때까지 다음 사용할 사람은 기다려야 한다.
> > 디비가 꺼지는 것을 방지하고, 대기시간을 주는 것
외부라이브러리 설치하고 import 하기(dbcp, logging, pool)
기본 세팅
public BasicDataSource bds = new BasicDataSource(); // 위로 따로 빼서 사용, 2번 클릭시 에러 안남
public ContactDAO() { // 처음 한번만 실행하면되니까 생성자 따로 만들어서 보관함
bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
bds.setUsername("kedu");
bds.setPassword("kedu");
bds.setInitialSize(20);
}
private Connection getConnection() throws Exception{
// BasicDataSource bds = new BasicDataSource(); //dbcp 인스턴스 ,bds에 커넥션 요청하면 됨
// bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
// bds.setUsername("kedu");
// bds.setPassword("kedu");
// bds.setInitialSize(50);
return bds.getConnection(); // 하나의 커넥션을 대여해가는 코드만 존재
}
1. bds 라는 BasicDataSource객체 선언하여 데이터 베이스 연결 정보 설정
2. ContactDAO 클래스의 생성자에게 bds를 초기화하고 데이터베이스 연결 정보 설정
3. getConnection() 메서드는 bds 를 사용하여 데이터베이스와의 연결을 가져옴( 이 메서드는 데이터베이스 커넥션을 얻는 데 사용됨)
JDBC_02_Contact > Exam02
사용자가 입력한 값이 날짜(문자열)일 경우
날짜가 넘어가는 경우 dbms에 저장되는 방법
dbms가 저장하는 타입을 정해야 함
1.varchar
오로지 출력만 할 것이면 사용해도 됨
날짜를 이용해서 기능( 기간 설정, 날짜 계산) 할 때 다루기 불편함
2. date타입 스트링타입을 util.date 사용후 -> date,Timestamp 로
java.sql.Date reg_date = new java.sql.Date(parsed.getTime());
> 똑같은 클래스 이름을 사용하려면 import 명 다 적어주어야 한다.
3. Timestamp 타입
package exam;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Exam02 {
public static void main(String[] args) throws Exception {
//DBMS 테이블에 날짜 컬럼을 Timestamp로 저장했다는 전제하에 예제
//reg_date(varchar) 기간지정,날짜 계산할 때 불편함 -> Timestamp(or Date)으로 변환
// 사용자가 날짜 입력(String) -> Timestamp(Date)으로 변환예제
// 1. 사용자로부터 날짜를 입력받음, 사용자로부터 입력받은 문자열은 inputDate에 저장됨
Scanner sc = new Scanner(System.in);
System.out.print("날짜 입력 (년도/월/일): ");
String inputDate = sc.nextLine();
// 2. SimpleDateFormat을 사용하여 입력받은 문자열을 Date 객체로 변환함
// SimpleDateFormat을 사용하여 문자열 형식의 날짜를 Date 객체로 파싱함
SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd");
Date parsed = sdf.parse(inputDate); //util로 import
// 3. Timestamp 객체를 생성하고 현재 시간을 기준으로 설정함(dbms에 timestamp타입으로 저장하는 방법)
Timestamp reg_date = new Timestamp(parsed.getTime());
// java.sql.Date reg_date = new java.sql.Date(parsed.getTime()); //* dbms에 date타입으로 저장하는 방법
// 똑같은 클래스 이름을 사용하려면 java.sql 다 적어주어야 한다.
// Timestamp -> Format String으로 변환하는 예제
// SimpleDateFormat을 사용하여 Timestamp 객체를 문자열 형식으로 변환
SimpleDateFormat sdf2 = new SimpleDateFormat("yy/MM/dd");
// 실제로는 () 안에는 db에서 꺼낸 값이 들어가야함
Timestamp reg_date = new Timestamp(System.currentTimeMillis());
// format 메서드를 사용하여 원하는 형식의 문자열 얻을 수 있음(yy/MM/dd형식으로 변환된 문자열을 얻음)
sdf.format(reg_date);
}
}
'2024_풀스택학원 > Back-end' 카테고리의 다른 글
[Java] JDBC_02_Contact (0) | 2024.05.02 |
---|---|
[Java] JDBC_mini_board (1) | 2024.05.02 |
[Database] 단일행 함수 / 그룹 함수 (0) | 2024.04.28 |
[Database] Group by / Having (0) | 2024.04.28 |
[ JDBC ] 04/26 (0) | 2024.04.26 |