230327 DB_JDBC

Myung A Lee·2023년 3월 27일
0

DB

목록 보기
15/15
post-thumbnail

JDBC (Java Databse Connectivity)

  • JAVA 프로그램이 Database와 연결 되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스로 응용 프로그램과 DBMS간의 통신을 중간에서 번역해주는 역할.

JDBC를 활용한 DBMS 연결

프로젝트 내 연동

    1. DB 접속 정보를 준비
    1. 추가한 라이브러리 드라이버를 불러온다.
    1. 드라이버 매니저를 불러 접속 정보를 준다.
    1. 드라이버 매니저가 가져온 컨넥션을 받는다.
    1. Connection을 이용하여 데이터를 처리하고 자원을 반납한다.
// DB 접속 메서드
public class HomeDAO {
	
	// db 접속 성공/실패 여부를 확인할 수 있도록 반환값을 설정
	public String dbConnection() {
		System.out.println("DB 접속 시도");
		
		// 1. DB 접속 정보 받기 (DB 접속시 필요한 정보와 동일)
		String host = "jdbc:mariadb://localhost:3306";
		String username = "web_user";
		String password="pass";
		String msg = "DB접속에 실패하였습니다. ";
		
		// 2. 사용하는 드라이버 라이브러리
		// "mariadb 라이브러리"와 같이 검색하면 찾을 수 있다.
		String driver = "org.mariadb.jdbc.Driver";
		
		// 3. 1,2 정보 제공을 위해 드라이버 매니저 부르기
		try {
			Class.forName(driver);
			Connection conn = DriverManager.getConnection(host,username,password);
			System.out.println(conn);
			if(conn != null) {
				msg="DB접속에 성공하였습니다. ";
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return msg;
	}


}

Connection Pool을 이용한 연결

  • 동시에 사용자가 접근할 때 동시에 사용할 수 있도록 Connection Pool을 사용할 수 있다.
    1. Common dbcp 라이브러리 추가
    1. Server 폴더 내 Context.xml의 Resource 속성 추가
	<Resource
    	name="jdbc/MariaDB"
    	auth="Container"
    	type="javax.sql.DataSource"
    	driverClassName="org.mariadb.jdbc.Driver"
    	url="jdbc:mariadb://localhost:3306/mydb"
    	username="web_user"
    	password="pass"
    />
    1. Context.xml을 객체로 가져온다.
      - 이때 Context는 인터페이스이므로 초기화가 불가능하다. 따라서 다형성에 따라 인터페이스를 구현한 InitContext를 객체화하여 사용한다.
    1. Resource에서 name으로 원하는 부분을 찾아(lookup) 가져온다.
    1. 가져온 정보를 이용하여 Connection을 생성한다.
    1. Connection을 이용하여 데이터베이스를 처리한다.
    1. 자원 반납
public class PoolDAO {
	public String dbConnection() {
		String msg = "DB 접속 실패";
		
		//context.xml에서 데이터를 어떻게 꺼내 올 것인가
		
		try {
			
			// 1. context.xml을 자바 객체화 시킨다. 
			Context ctx = new InitialContext();
			
			// 2. Resource를 찾아온다. (name을 사용)
			// 3. 이 내용을 DataSource 객체로 변환 한다.
			
			DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MariaDB");
			
		
			// 4. 컨넥션을 받아온다.
			Connection conn = ds.getConnection();
			
			System.out.println(conn);
			
			if (conn != null) {
				msg = "DB 접속 성공";
				// 자원 반납
				conn.close();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		
		
		return msg;
	}
}

JDBC QUERY

  • 데이터 베이스의 데이터를 처리하기 위한 Query문을 실행하기 위해 Connection은 두가지 방법을 제공해 준다.

Statement 객체

  • 쿼리문을 실행
  • 일반적으로 한번 실행 된 뒤 재사용할 일이 없는 경우 (CREATE, DROP 등)에 사용한다.

Prepared Statement 객체

  • 쿼리문을 실행할 때 '?' 를 사용항 다양한 대응이 가능하다.
  • 문장을 컴파일 후 재사용하기 때문에 여러번 반복 될 때 유리하며 성능과 속도 면에서 우수하다.

executeQuery() 메서드

  • 반환되는 데이터가 있는 (SELECT 등) 경우 사용하며 반환 타입은 ResultSet형태이다.

executeUpdate() 메서드

  • DB 데이터에 변화를 줄 경우 (UPDATE, DELETE, INSERT)에 사용하며 반환값은 변경이 적용된 데이터 행의 갯수이므로 int 타입이다.

0개의 댓글