공부/Java

JDBC(Databases)//MySQL

726582776982 2022. 5. 2. 10:10

JDBC(Java Database Connectivity)는 

자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 

JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

JDBC 드라이버들은 자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 클라이언트 사이드 어댑터이다. (서버가 아닌 클라이언트 머신에 설치)

출처 - https://ko.wikipedia.org/wiki/JDBC (위키피디아)

 

---- DB Connection ----

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//src -> build Path -> Libraries (상단메뉴) -> ClassPath 경로에 JDBC (Jar) 파일을 추가하여 DB를 처리할 수 있도록 함.
//** 참조 SQL 클래스
import java.sql.Connection;
import java.sql.DriverManager;
 
//** DB 연결
//=> Connection 클래스가 DB 연결및 연결정보를 관리함
// 즉, Connection 객체를 생성해야함
public class Ex01_DBConnection {
    // ** connection 객체 생성
    public static Connection getConnection(){
        try {
Class.forName("com.mysql.cj.jdbc.Driver");
// mySQL 전용 JDBC 드라이버
            String url = "jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"
// mySQL 전용 경로 
            System.out.println("** JDBC Connection 성공 **");
            return DriverManager.getConnection(url,"mysql","mysql");
        } catch (Exception e) {
            System.out.println("** JDBC Connection 실패 => "+e);
            return null;
        }
    }
}
cs

 

---- DAO ----

// Data Access Object
//** DAO(Data Access Object)
//=> SQL 구문 처리 *******************************
//=> CRUD 구현
// Create(insert), Read(select), Update, Detete
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private static Connection cn = Ex01_DBConnection.getConnection();
// mySQL 연결 클래스 인스턴스화
 
    private static Statement st; // 
// Statement 클래스
// SQL 구문을 실행하는 역할
// 스스로는 SQL 구문 이해 못함(구문해석 X) -> 전달역할
// SQL 관리 O + 연결 정보 X
// 각 구문을 실행하는 과정에서 전달하고 전달받은 사항을 
// 다시 ResultSet 으로 이동하는 과정에서 보안상 이유(Secure Coding, SQL injection 방지) or 지속적인 반복처리(반복문 or 지속적인 요청처리)등의 이유로 Pst 가 효율성이 더 좋다.
 
    private static PreparedStatement pst;
// ** preparedStatement
//  파싱횟수 (참조처리) 감소
// => 전달받을 값 위치에 ? 사용
// => ? : 바인딩 변수
// => 바인딩 변수를 처리하기위해 SQL 구문을 먼저처리함. -> 값을 변환 처리(보안성)
 
    sql = "select * from member where name = ?";
// select * from member where name = '스티브'
    pst = cn.prepareStatement(sql);
    pst.setString(1, name); 
// (처음 나타나는 ? 의 인자값 , 원하는 경로? 대상?) 
// ?) 바인딩 변수를 사용하기위해 sql 파라미터값을 미리추가함.
    rs = pst.executeQuery();
// 실행 시 파라미터값이 없다.
 
    private static ResultSet rs;
// 결과값을 저장할 수 있다.
// 저장된 값을 한 행 단위로 불러올 수 있다.
// 한 행에서 값을 가져올 때는 타입을 지정해 불러올 수 있다.
 
// 1.2) sql 구문 처리(상황에 따른 
    st = cn.createStatement();    
    rs = st.executeQuery(sql); // Read (Select 읽어들어오는 명령어 )
    // 실행 시 파라미터값 (sql)을 전달받는다.
    // 1.3) 결과처리
    // (rs) ResultSet 변수에 결과가 있는지 확인 후 마지막 데이터까지 출력
    int count = pst.executeUpdate(); // Create , Use , Delete( 수정사항이 적용되야하는 명령어) 
    private static String sql;
// SQL 구문( Create , Read(select) , Update, Delete ==> CRUD) 구문을 String 타입의 변수를 지정해 저장.
cs