JDBC란?
- 데이터 베이스를 자바기반 어플리케이션에서 사용하기 위한 라이브러리.
- Oracle, MS SQL, MySQL 등 각 언어마다 쿼리는 다르지만, 기능은 동일하다.
- DB에 관계없이 자바 코드로 데이터 베이스를 작성할 수 있는 인터페이스이다.
- Java DataBase Connectivity
- 사용하는 데이터베이스를 교체해도 자바 코드를 바꾸지 않아도 된다.
- JDBC가 실제 데이터 베이스를 동작시키기 위해 각 제조사에서 만들어놓은 JDBC Driver를 사용한다.
- 실제 구동은 드라이버가 한다.
실행 과정
- 드라이버 로드하기
- 연결 생성
- 문장 실행
- 결과집합 사용하기
DB와 Driver 설치
현재 랩탑에 설치돼있는 mysql 8.0.25을 사용하겠다.
실습
데이터 조회
기본 코드 이해
- 연결 단계
- 이러한 순서로 진행된다.
- new 연산자로 객체를 만들지 않는다.
- Class.forName("com.mysql.cj.jdbc.Driver");
- 1번이 실행되면, 드라이버가 메모리에 올라간다.
- Connection con = DriverManager.getConnection(...);
- 2번이 실행되면, 연결이 이루어진다. 드라이버 객체를 얻는다.
- Statement st = con.createStatement();
- 3번이 실행되면, 쿼리를 실행한다.
- 결과 집합이 만들어진다.
- 레코드 단위로 한줄 씩 받아온다.
- 3번이 실행되면, 쿼리를 실행한다.
- ResultSet rs = st.executeQuery(sql);
- rs.next();
- String title = rs.getString("title");
- 순회하면서 데이터를 얻는다.
- 이러한 순서로 진행된다.
public class Program {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
String sql = "SELECT * FROM employee";
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
rs.next();
String name = rs.getString("name");
System.out.println(name);
rs.close();
st.close();
}
}
데이터 추가
public class Program2 {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
// String sql = "INSERT INTO employee VALUES(1111, 'Choi', 'programmer', 7788, '2019-12-22', 9999.99, 300.00, 10)";
String sql = "INSERT INTO employee VALUES(?,?,?,?,?,?,?,?)";
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
// Statement st = con.createStatement();
PreparedStatement st = con.prepareStatement(sql);
st.setInt(1, 1111);
st.setString(2, "Choi");
st.setString(3, "Pro");
st.setInt(4, 7788);
st.setString(5, "2019-12-22");
st.setBigDecimal(6, BigDecimal.valueOf(9999.99));
st.setBigDecimal(7, BigDecimal.valueOf(300.00));
st.setInt(8, 10);
int result = st.executeUpdate();
st.close();
con.close();
}
}
데이터 수정
public class Program3 {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
String sql = "UPDATE EMPLOYEE SET job = 'CTO' WHERE name = 'Choi'";
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
PreparedStatement st = con.prepareStatement(sql);
int result = st.executeUpdate();
st.close();
con.close();
}
}
데이터 삭제
public class Program4 {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
String sql = "DELETE FROM employee WHERE name = 'Choi'";
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
PreparedStatement st = con.prepareStatement(sql);
int result = st.executeUpdate();
st.close();
con.close();
}
}
쿼리문만 바꿔서 데이터 CRUD를 할 수 있다.
어떤 조건을 걸때는 자바 단에서 하는 게 아니라 쿼리문에서 해주는 것이 시간,공간을 절약할 수 있다.
'Programming > 언어' 카테고리의 다른 글
[Kotlin] 표현식과 명령문 (0) | 2023.02.12 |
---|---|
Java 코드가 실행되는 과정 (0) | 2021.12.26 |
Garbage Collector 찍먹하기 (0) | 2021.12.26 |
객체지향에서 인터페이스란? (0) | 2021.12.26 |
Java 자잘한 실수 모음 (0) | 2020.07.06 |