DB
JDBC 주요 API
짱코딩러
2022. 8. 10. 16:14
주요 API
1. Connection 인터페이스
- 자바프로그램과 데이터베이스간의 연결을 담당하는 객체다.
- Statement createStatement() SQL전송을 담당하는 Statement객체를 말한다
- PreparedStatement prepareStatement(String sql) SQL전송을 담당하는 Statement객체를 반환한다.
- void commit() SQL실행결과를 DB에 반영시킨다.
- void rollback() SQL실행결과의 DB반영을 취소시킨다.
- void close() DB와의 접속을 해제한다.
2. Statement 인터페이스
- SQL의 전송을 담당하는 객체다.
- int executeUpdate(String sql) INSERT, UPDATE, DELETE 쿼리를 DB로 전송하고, 실행결과를 반환한다.
- ResultSet executeQuery(String sql) SELECT 쿼리를 DB로 전송하고, 조회결과를 반환한다.
- void close() DB 연결 자원을 해제한다.
3. PreparedStatement 인터페이스
- SQL의 전송을 담당하는 객체다.
- int executeUpdate() INSERT, UPDATE, DELETE 쿼리를 DB로 전송하고, 실행결과를 반환한다.
- ResultSet executeQuery() SELECT 쿼리를 DB로 전송하고, 조회결과를 반환한다.
- void setXXX(int index, XXX value) 파라미터값(?, ?, ?, ?, ? 위치에 실제값)을 설정한다. void setString(int index, String value)void setInt(int index, int value)void setDouble ( int index, double value)
- void setDate( int index, Date value)
- void setLong(int index, long value)
- void close() DB 연결 자원을 해제한다.
4. ResultSet 인터페이스
- SELECT 쿼리문의 조회결과를 담당하는 객체다
- boolean next() 커서를 다음행으로 이동시킨다. 데이터행이 존재하면 true를 반환한다. 시작위치는 첫번째행 앞이다
- XXX getXXX(String columnName) 컬럼명에 해당하는 값을 반환한다.
- void close() DB 연결 자원을 해제한다.
5. DriverManager 클래스
- JDBC 표준을 구현한 JDBC드라이버를 관리하는 클래스다.위에 언급한 인터페이스를 구현한 클래스들의 모음이다.
- Connection객체를 반환한다.
- *JDBC드라이버는 각 DBMS제작사가 자사의 DBMS에 엑세스 할 수 있도록
- Connection getConnection(String url, String username, String password)
- *url이 가르키는 데이터베이스에 지정된 계정정보로 연결을 담당하는 클래스
JDBC 템플릿
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCTemplate {
// DB 연결, JDBC 자원 반환 같은 JDBC 공통내용 추출 클래스
/*
* 1. Connection 객체 생성해서 반환
* 2. 전달 받은 JDBC 객체 자원 반환 (close)
* 3. 트랜잭션 제어구문(commit ,rollback)
* */
private static Connection conn = null;
//객체 생성을 하지 않아도 되는 변수
//단 , 외부로부터 직접 접근은 차단
//DB 연결 정보를 담고있는 Connection 객체 반환용 메서드
public static Connection getConnection() {
//이전에 생성된 Connection이 있고, close() 되지 않았을 경우
// 이전 Connection을 재활용하고
// 이전 생선된 Connection이 없거나 close 되었으면
// 새로운 Connection을 반환
// why?
/* => 우리는 한 프로그램에 여러명이 접속하는 형태를 만들 예정
* 그러므로 객체가 계속해서 생성되면 과부하가 걸림
* =>접속한 사람 당 커넥션을 1개씩만 만들 수 있게 함
* */
//DB연결 정보는 변경될 가능성이 있는데 그 때마다 컴파일 하는 것은 시간 낭비 심함
//값 변해도 컴파일 다시 안해도 되도록 파일을 읽는 방식으로 수정
//= 파일 내용만 변경하도록
//XML 형식(DB연결 정보를 xml 파일에 별도로 작성해서 읽어오는 식)
//---->확장 가능한 마크업 랭귀지
//== 프로그래밍 언어와 상관 없이 데이터를 저장, 전달 가능한 파일
//요즘은 jason
//XML에 작성된 DB 연결 정보를 Properties라는 객체를 이용해 얻어올 예정
//Properties : 컬렉션 중 Map<K,V> 후손 클래스
// K, V가 모두 String으로 제한된 Map
// 장점: 파일입출력에 특화되어있음
try {//isClosed : 커넥션 객체가 close() 된적 있으면 true;
// xml 읽어와 저장할 Properties
Properties prop = new Properties();
//driver.xml 읽어오기
prop.loadFromXML(new FileInputStream("driver.xml"));//try 안에 쓰기
if(conn ==null || conn.isClosed()) {
Class.forName(prop.getProperty("driver"));
conn = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("dbId"), prop.getProperty("dbPw"));
conn.setAutoCommit(false);
//자동 커밋 기능 off
//(주의사항) conn.close()가 수행되는 경우 자동으로
//commit() 이 수행된다.
//->conn.close() 호출 전에 트랜잭션 제어 구문을 작성해야 된다
//그러므로 conn.close 호철 전에 트랜잭션 제어 구문을 작성해야 한다.
}
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
//Statement 객체 반환 메서드
public static void close(Statement stmt) {
try {
if(stmt!=null && !stmt.isClosed()) {
stmt.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet rs) {
try {
if(rs!=null && !rs.isClosed()) {
rs.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn) {
try {
if(conn!=null && !conn.isClosed()) {
conn.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
// commit 메서드
public static void commit(Connection conn) {
try {
if(conn!=null && !conn.isClosed()) {
conn.commit();}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void rollback(Connection conn) {
try {
if(conn!=null && !conn.isClosed()) {
conn.rollback();}
} catch (SQLException e) {
e.printStackTrace();
}
}
}