Back-end/java
JDBC 한번에 이해하기
OlttaeMelona
2022. 8. 18. 23:16
🌟JDBC란 무엇일까?
JDBC(Java DataBase Connectivity)는 자바에서 데이터베이스에 접속할 수 있게 도와주는 자바 API다.
오라클이나 mySQL 같이 데이터베이스를 관리하는 드라이버를 자바에 연결해서 데이터를 CRUD(Create, Read, Update, Delete)하는 방법을 제공한다.
🌟JDBC 사용법
1) jdbc 드라이버 호출
- Class.forName(”driver”) ⇒ 드라이버를 로드
Driver 클래스를 찾지 못한 경우 ClassNotFoundException 예외 발생
ex)
Class.forName("com.mysql.cj.jdbc.Driver");
2) 데이터 베이스와 연결
- Connection ⇒ 데이터베이스와 연결하는 객체
- DriverManager⇒ JDBC 드라이버를 통해 Connection을 만드는 역할. Class.forName()메소드를 통해 생성된다.
먼저 Class.forName(”driver”)으로 드라이버 로드 후 Connection을 통해 활성화 시켜주기위해 DriverManager.getConnection(연결문자열, DB_id, DB_pw)으로 Connection 객체를 생성한다.
ex)
Connection con = null;
con = DriverManager.getConnection(”jdbc:mysql://127.0.0.1:3306/member”, emp, emp);
3) SQL실행과 실행 후 데이터 받기
- Statement ⇒ SQL을 실행하는 객체
- PreparedStatement ⇒ SQL을 실행하는 객체
- ResultSet ⇒ SQL문 실행 후 데이터를 받는 객체
Statement와 PreparedStatememt는 둘다 SQL을 실행하는 객체이다. 둘의 차이점은 무엇일까?
두 클래스의 가장 큰 차이점은 Statement는 SQL을 실행할 때마다 SQL 구문을 매번 새로 작성하고 해석해야 하는 반면 PreparedStatement 는 선처리 방식을 사용한다.
SQL문을 미리 준비해두고 변수를 사용해서 반복되는 비슷한 SQL문을 처리할 수 있다. 주로 웹 개발을 할때 보안문제 (SQL injection)때문에 PreparedStatement를 사용한다.
ResultSet 클래스는 Select문을 사용해서 얻은 레코드 값들을 테이블의 형태로 받아 저장할 수 있는 객체이다.
예시
package jdbc;
//Conncetion import
import java.sql.Connection;
public class JdbcTest{
//데이터베이스와 연결하는 객체
Connection con = null;
//드라이버 호출을 위한 정보
String driver = "com.mysql.cj.jdbc.Driver";
//데이터베이스와 연결하기 위한 정보
String url ="jdbc:mysql://127.0.0.1:3306/member";
String user = "emp"
String pw = "1234"
try{
//1.jdbc 드라이버 호출
Class.forName(driver);
//2.db 연결
//DriverManager를 통해 connection 생성
con.DriverManager.getConnection(url, user, pw);
System.out.println("드라이버 연결 성공");
//SQL 쿼리문 작성
String sql = "select * member from employee";
...
//3. SQL 실행하기
PreparedStatement pt = con.preparedStatement(sql);
//4. SQL에서 데이터 받기
ResultSet rs = pt.executeQuery();
}catch(SQLException e){
System.out.println("SQL Errer : " + e.getMessage());
}catch(ClassNotFoundException e){
System.out.println("JDBC Connection Driver errer : "+ e.getMessage());
}finally{
//5. db연결 해제
try{
con.close(); //mysql 외부연결 허용 최대치 - 100여개
}catch(SQLException e){}
}
}