본문 바로가기

2024_풀스택학원/Back-end

[Java] DBCP, TIMESTAMP

DBCP( DatatBase Connection Pool)

 

DBCP란?

- 서비스에 Connection을 요구하는 동시접속자가 과포화 되었을 때,

DBMS의 Down을 방지하는 기술

- 미리 생성된 인스턴스의 대여 및 반환 기법으로, 접속자 대기 시간은 발생할 수 있으나, 

DBMS는 정상 운행됨

 

pool =  커넥션들이 모여있는 울타리

 

dbcp 라이브러리 사용해서 커넥션 만들기

> 커넥션을 지정한 개수 만큼 만들어놓고 사용자들이 커넥션 요청할 때 빌려줬다가 돌려받음 

> 먼저 사용한사람이 다시 돌려놓을때까지 다음 사용할 사람은 기다려야 한다.

 

> > 디비가 꺼지는 것을 방지하고, 대기시간을 주는 것

 

외부라이브러리 설치하고 import 하기(dbcp, logging, pool)

https://mvnrepository.com/

 

 

기본 세팅

	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