[JAVA] JDBC 뿌시기

Jay·2021년 6월 17일
0

Java

목록 보기
1/1
post-thumbnail

1. 시작

안녕하세요. 오늘은 JDBC라는 걸 배워보도록 하겠습니다! JDBC는 자바로 데이터베이스를 접근해서 조작이 가능한 기능인데요. 자바에서도 데이터의 CRUD가 가능하고, 또 그걸 이용해서 프로그램을 제작할 수 있습니다.

2. JDBC의 구조

https://www.educba.com/jdbc-architecture/

JDBC의 architecture 입니다. 이 글은 DB를 Oracle로 사용한다는 전제 하에 적용 가능합니다.

JAVA에서 바로 DB로 접근 할 수는 없고, JAVA에서 제공하는 특별한 JDBC 관련 클래스를 사용해야 합니다. Oracle의 경우 JDBC Driver를 이용해 Oracle로 접근하게 됩니다.

3. JDBC 연결 방법

(1) Driver 연결

Class.forName("oracle.jdbc.driver.OracleDriver");
  • Class.forName( ) : 실행을 하면 드라이버의 클래스 파일이 메모리에 로드 됩니다.

(2) DB server 연결

  • Driver가 load된 후 연결이 설정 됨

String url = "jdbc:oracle:thin:@localhost:0000:XE";
String user = "test";
String password = "1234";

Connection con = DriverManager.getConnection(URL, user, password);
  • Connection : DriverManager.getConnection() 메서드에서 연결할 DB의 URL과 계정 ID, 계정 비밀번호를 DB에 연결하고 Connection 객체를 반환함
  • Parameter 중 URL : 데이터베이스 이름, 사용 된 드라이버, 데이터베이스가 저장된 IP 주소, 포트 번호 등이 포함 된 미리 정의 된 형식이 있습니다.
  • Connection은 DB와 연결하는 객체라고 이해하시면 됩니다

(3) 쿼리 객체 저장

  • PreparedStatement, createStatement 같은 인터페이스는 사용자가 SQL 문을 보내고 데이터베이스에서 데이터를 가져올 수있는 메서드를 제공함

//(1) PreparedStatement 사용 
String sql = "select * from member where member_id=?";
PreparedStatement stmt = conn.prepareStatement(sql);

stmt.setString(1, member_id);

//(2) createStatement 사용 
String sql = "select * from member where member_id='"+member_id+"'";
Statement stmt = conn.createStatement(sql);

차이점이 느껴지시나요? PreparedStatement는 '?'라는 곳에 setString() 메서드를 사용해 첫번째 물음표에 전달 받은 member_id 변수를 넣어줍니다.
반변에 createStatement 메서드는 변수를 넣으려면 sql 변수에 일일이 따옴표를 넣어서 중간에 '+'로 문자열을 이어줘야 하는 번거로움이 있습니다.
저렇게 쓰면 안 좋은 점이 쿼테이션을 잘못 닫았거나, 공백이 있거나, 순서가 잘못되면 실행 시 바로 SQL Exception을 때려버립니다.
그래서 DB에 전달 해야할 매개변수들이 많으면 PreparedStatement를 사용하는 게 좋겠죠?

  • PreparedStatement : 쿼리에 매개변수를 전달해야 할 때
  • createStatement : 쿼리에 매개변수를 전달하지 않는 단일 쿼리에 사용하기 적당함 (ex) 한 번만 조회할 때, create, alter, drop, truncate 사용 할 때)

(4) 쿼리가 실행되어 추출된 데이터 저장

ResultSet rs = stmt.executeQuery("select * from member");
//특정 컬럼 값만 가져오는 것도 가능
ResultSet rs = stmt.executeQuery("select name, id from member");
//조건 절도 사용 가능
ResultSet rs = stmt.executeQuery("select name, id, email from member where member_id='test01'");
  • sql문을 실행 후, 실행 된 데이터를 ResultSet 객체에 저장
  • executeQuery() : 데이터를 검색할 때
  • executeUpdate() : 데이터를 추가, 수정, 삭제 같은 작업을 할 때

(5) 받아온 데이터 확인

  • ResultSet에 저장된 각 행의 모든 열을 순서대로 출력

ResultSet rs = stmt.executeQuery();

// rs에 저장된 다음 행으로 커서를 옮긴다.
if(rs.next()) {
	String id = rs.getString("member_id");
    String name = rs.getString("member_name");
    String email = rs.getString("member_email");
    
    //int로도 가져올 수 있다.
    int number = rs.getInt("number")
}				
			
  • ResultSet으로 담아온 데이터에 커서가 가리키는 현재 행에 대해 열의 값을 읽어 온다

(6) JDBC 종료


rs.close(); // ResultSet rs
stmt.close(); // PreparedStatement stmt
conn.close(); // Connection conn
  • 쿼리를 실행 한 후 사용자가 업데이트하거나 검색하려는 데이터가 완료되었으므로 설정된 연결을 닫아야 함
  • 저 순서대로 꼭!!! close() 해야 함

4. java.sql Package

JAVA는 sql과 관련된 클래스를 제공한다고 앞서 말했는데요. JAVA API에서 JAVA.SQL 찾아보면 여러 개의 interfaces를 확인 할 수 있습니다.

(1) Driver Interface

  • Driver Interface는 여러 데이터베이스 드라이버를 허용합니다.
    DriverManager는 데이터베이스와 통신하기 위해 만들어집니다
  • ex) DriverManager.registerDriver ();

(2) Connection Interface

  • 자바 프로그램과 데이터베이스 간의 연결 즉 세션을 설정합니다
  • ex) rollback (), close () 등

(3) Statement Interface

  • SQL 쿼리 실행을위한 메소드를 제공합니다
  • ex) executeQuery (), executeUpdate ()

(4) PreparedStatement Interface

  • SQL 쿼리를 여러 번 구현해야 할 때 사용을 권장합니다.
  • 런타임 중에 매개 변수를 받아 사용합니다

(5) CallableStatement Interface

  • 저장 프로 시저에 액세스 할 때 사용합니다.

(6) ResultSet Interface

  • SQL 쿼리 실행 후 반환 된 결과를 저장합니다.

오늘 JDBC를 공부해봤는데요. 앞으로의 웹이나 스프링 프로젝트에서 DB를 연결이 필수라 프로젝트에서 DB를 사용하실 거라면 이번 JDBC를 공부하는 게 굉장히 도움이 됩니다.

글 읽어주셔서 감사하고, 행복한 하루 보내세요! 😊

profile
🟣 Fake till you make it 🟣 Finish Strong 💪

0개의 댓글