본문 바로가기
Infra/Database

[Boostcourse] JDBC 설명

by Wordbe 2019. 11. 23.
728x90

JDBC

keyword

  • JDBC
  • DriverManger
  • Connection
  • Statement
  • ResultSet

JSBC(Java Database Connectivity)

  • 자바 이용한 데이터베이스 접속과 SQL 문장의 실행, 실행결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약

  • 자바 프로그램내에서 SQL문을 실행하기 위한 자바 API

  • SQL과 프로그래밍 언어의 통합 접근 중 한 형태

JAVA는 표준 인터페이스인 JDBC API를 제공합니다.

데이터베이스 벤더, 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 사용합니다.

환경구성

  • JDK

  • JDBC 드라이버 설치

    Maven에 의존성 추가, MySQL 사이트에서 다운로드

    pom.xml

    
      
    <dependency>
    <groudId>mysql</groudId>
    <artifactId>mysql-connect-java</artifactId>
    <version>5.1.45</version>
    </dependency>

JDBC 사용

1) import java.sql.*;

2) 드라이버 load


  
Class.forName("com.mysql.jdbc.Driver");

3) Connection 객체 생성 (클라이언트가 DB 접속)


  
String dburl = "jdbc:mysql://localhost/dbName";
Connection con = DriverManger.getConnection(dburl, ID, PWD);

4) Statement 객체 생성 및 질의 수행 (Query문 생성 및 실행)


  
Statement stmt = con.createStatemnet();
ResultSet rs = stmt.executeQuery("select no from user");

질의 수행

​ stmt.execute("query"); ← any SQL

​ stmt.executeQuery("query"); ← SELECT

​ stmt.execcuteUpdate("query"); ← INSERT, UPDATE, DELETE

5) SQL문에 결과물이 있다면 ResultSet 객체를 생성 (SELECT는 표반환, INSERT, DELTETE 등은 확인 반환)

​ ResultSet로 결과 받기, DB안에서 결과를 rs 포인터가 가리키도록 합니다.


  
ResultSet rs = stmt.executeQuery("select no from user");
while (rs.next())
System.out.println(rs.getInt("no"));

6) 모든 객체를 닫음 (접속 끊음, DB는 접속가능한 클라이언트 수가 제한되어있음)


  
rs.close();
stmt.close();
con.close();

JDBC 클래스의 생성관계

DriverManger를 통해 Connection 인스턴스를 얻습니다.

Connection 통해 Statement 얻습니다.

Statement 통해 ResultSet을 얻습니다.

소스코드 예제


  
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;
}

  
public static void close(Connection conn, PreparedStatement ps){
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {e.printStackTrace(); }
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {e.printStackTrace();}
}
}

실습

입력/수정/조회/삭제

File > New > Maven project > next 버튼 > quickstart (기본설정) >

artifactId : jdbcexam > finish 버튼

그림과 같이 java 클래스를 생성합니다.

[소스보기]

https://github.com/Wordbe/TIL/tree/master/Web/5.%20DB%20%EC%97%B0%EA%B2%B0%20%EC%9B%B9/jdbc

JDBCExam1.java

RoleDao.java

Role.java

pom.xml


Reference

https://www.edwith.org/boostcourse-web/lecture/20653/

728x90

'Infra > Database' 카테고리의 다른 글

한글 검색기 만들기  (0) 2021.08.16
[springboot] mysql database - java (JPA) 연동  (4) 2020.10.03
MariaDB 다운로드, 계정 설정  (261) 2020.07.31
[Boostcourse] SQL, MySQL  (622) 2019.11.21

댓글