JDBC
JDBC란?
JDBC(Java Database Connectivity)
- 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규악
- 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API
- SQL과 프로그래밍 언어의 통합 접근 중 하나의 형태
자바는 표준 인터페이스인 JDBC API를 제공한다. 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버를 제공한다.
환경 구성
- JDK 설치
- JDBC 설치
- 우리는 Maven으로 이용하기 때문에, 의존성을 추가한다.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.45</version> </dependency>
- 우리는 Maven으로 이용하기 때문에, 의존성을 추가한다.
JDBC 사용
- import
import java.sql.*;
- 드라이버 로드
Class.forName("com.mysql.jdbc.Driver");
- Connection 객체 생성
- 데이터베이스에 접속을 함
String dburl = "jdbc:mysql://localhost/dbName";
Connection con = DriverManager.getConnection(dburl,ID,PWD);
- Statement 객체 생성 및 질의 수행
- 쿼리문 생성 및 실행
- 질의문 생성:
Statement stmt = con.createStatement();
- SQL문에 결과물이 있다면 ResultSet 객체 생성
- 질의 수행 및 ResultSet 객체 생성:
ResultSet rs = stmt.executeQuery("select no from user");
while(rs.next()) System.out.println(rs.getInt("no"));
- 질의 수행 및 ResultSet 객체 생성:
- 모든 객체 close
- rs.close();
- stmt.close();
- con.close();
JDBC 클래스 생성 관계
- DriverManager
- Connection: DriverManager를 이용해 Coneection 인스턴스를 얻는다.
- Statemnt: Connection을 통해 Statement를 얻는다.
- ResultSet: Statement를 이용해 ResultSet을 얻는다.
- Statemnt: Connection을 통해 Statement를 얻는다.
- Connection: DriverManager를 이용해 Coneection 인스턴스를 얻는다.
사용 예제
public List<GuestBookVO> getGuestBookList(){
List<GuestBookVO> list = new ArrayList<>();
GuestBookVO vo = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = DBUtil.getConnection();
String sql = "select * from guestbook";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
vo = new GuestBookVO();
vo.setNo(rs.getInt(1));
vo.setId(rs.getString(2));
vo.setTitle(rs.getString(3));
vo.setConetnt(rs.getString(4));
vo.setRegDate(rs.getString(5));
list.add(vo);
}
}catch(Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn, ps, rs);
}
return list;
}
데이터 베이스에서 데이터 불러오기
예제 DAO1
public class RoleDao {
private static String dburl = "jdbc:mariadb://내-주소:3306/connectdb";
private static String dbUser = "connectuser";
private static String dbPasswd = "connect123!@#";
public Role getRole(Integer roleId) {
Role role = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(dburl,dbUser,dbPasswd);
String sql = "SELECT description,role_id FROM ROLE WHERE role_id = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, roleId);
rs = ps.executeQuery();
if(rs.next()){
role = new Role(rs.getInt("role_id"),rs.getString(1));
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(rs != null)
try {
rs.close();
}catch (Exception e){
e.printStackTrace();
}
if(ps != null)
try {
ps.close();
}catch (Exception e){
e.printStackTrace();
}
if(conn != null)
try {
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
return role;
}
}
데이터 베이스에서 데이터 삽입하기
예제 DAO2
public class RoleDao {
private static String dburl = "jdbc:mariadb://내-주소:3306/connectdb";
private static String dbUser = "connectuser";
private static String dbPasswd = "connect123!@#";
public Role addRole(Role role) {
int insertCount = 0;
Connection conn = null;
PreparedStatement ps = null;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(dburl,dbUser,dbPasswd);
String sql = "INSERT ROLE (role_id, description) VALUE (?, ?)";
ps = conn.prepareStatement(sql);
ps.setInt(1, role.getRoleId());
ps.setString(2, role.getDescription());
insertCount = ps.executeUpdate();
System.out.println(insertCount);
}catch (Exception e){
e.printStackTrace();
}finally {
if(ps != null)
try {
ps.close();
}catch (Exception e){
e.printStackTrace();
}
if(conn != null)
try {
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
return role;
}
}
최근댓글