본문 바로가기
TIL : JAVA

JDBC 로 MySQL 연결하기

by 이페코장인 2024. 3. 30.

자바에서 JDBC 사용 준비하기

자바에서 JDBC를 사용하기 위해 다음과 같은 객체들을 우선 선언한다.

public class TestClass {
    // DB 연결을 유지하는 객체
    public static Connection conn = null;
    // SQL을 담는 객체
    public static Statement stmt = null;
    // select문의 결과 값을 받는 객체 
    public static ResultSet rs = null;
}

 

그리고 MySQL에 연결하기 위해 연결하고자 하는 MySQL드라이버의 설정들을 다음과 같이 먼저 작성한다.

// MySQL에 연결할 드라이버클래스를 문자열 형태로 선언
public static String driverClass = "com.mysql.cj.jdbc.Driver";
// JDBC형식의 URL
// 127.0.0.1 = loopback IP(호스트이름), 3306 = 포트주소, test = DB이름(스키마 이름)
public static String url = "jdbc:mysql://127.0.0.1:3306/test";
// 접속 유저 이름
public static String user = "user";
// 비밀번호
public static String password = "1111";

 

이제 6단계에 따라 MySQL에 연결하게 된다.

 

 

1. class 드라이버 등록

Class.forName() 메소드로 문자열 형태의 클래스를 JVM (Java Virtual Machine) 으로 로드해준다.

Class.forName(driverClass);

 

 

2. DBMS와 연결

DriverManager.getConnection()으로 앞서 만들었던 Connection객체를 JDBC연결해준다.

conn = DriverManager.getConnection(url, user, password);

 

 

3. SQL 생성

사용하고자 하는 쿼리문을 생성한다

String query = "SELECT * FROM MEMBER"; // 주의: 쿼리 끝에 ; 붙이면 에러 발생!!!!!

 

 

4. SQL 전송

연결된 connection객체에서 createStatement() 메소드를 호출하여 앞서 만들었던 Statement 객체에 담아준다. 그리고 Statement 객체에서 executeQuery(), executeUpdate() 와 같은 메소드를 호출하고, 질의문장을 String객체에 담아 인자로 전달하여 SQL질의를 수행한다.

// Statement 객체 생성 (Connection객체에 연결)
stmt = conn.createStatement();

 

 

5. 결과 받기

executeQuery() : Resultset 반환하는 SQL문에 사용하는 메소드. 주로 SELECT문 조회에 사용

executeUpdate() : DML (INSERT, UPDATE, DELETE), DDL (CREATE, DROP, ALTER)를 수행하기 위한 메소드. DML수항하면 영향받은 행의 수를 반환. DDL수행하면 0을 반환.

사용한 메소드에 맞춰서 결과를 받아, 질의가 잘 수행됐는지 확인한다.

 

ResultSet : SELECT문을 사용한 질의 성공 시 반환되는 객체로, 실제 질의에 대한 결과를 조회 가능하다. Statement로 SQL질의에 의해 생성된 테이블을 담아서 사용하며 커서(cursor)로 특정 행에 대한 참조를 조작, 만일 Result row의 결과가 0인 경우 조회될 수 없다.

 - .next() = 커서를 다음 행으로 이동하는 명령, 끝에 도달하면 false반환

 - .getString(컬럼명|인덱스) = 커서가 위치한 행의 데이터 사용

// 쿼리 실행 후 결과를 rs에 저장하기
rs = stmt.executeQuery(query);

// rs에서 값 읽기

// next : 커서를 넘겨 다음 행으로 이동하는 명령. 끝에 도달하면 false반환
while (rs.next()) {
    StringBuffer sb = new StringBuffer();
    sb.append(rs.getInt("mno")); // mno라는 int값 받기
    sb.append(rs.getString("name")); // name이라는 String값 받기
}

 

 

6. 연결 닫기

주의) 객체를 사용완료한 후 반드시 닫아줘야 한다.

생성된 객체의 역순으로 닫아주면 된다.

if(rs != null && rs.isClosed() == false) {
    rs.close();
}
if(stmt != null && stmt.isClosed() == false) {
    stmt.close();
}
if(conn != null && conn.isClosed() == false) {
    conn.close();
}

 

 

추가 : PreparedStatement

DB연결 후 실제 SQL문을 수행하기 위한 객체 Connection클래스의 preparedStatement() 메소드를 호출하여 생성된 SQL문장이 미리 컴파일되고 실행 시간 동안 인수 값을 위한 공간을 확보한다는 점에서 고정된 SQL문을 수행하는 Statement와 다르다.

try{
	String query = “INSERT INTO MEMBER VALUES(?, ?)”;
	PreparedStatement pstmt = conn.prepareStatement(query);
	pstmt.setString(1, id);
	pstmt.setString(2, password);
	pstmt.excuteUpdate();
} catch(SQLException e){
	e.printStackTrace();
}

'TIL : JAVA' 카테고리의 다른 글

[Java] 선형 검색 Linear Search  (0) 2024.05.02
[Java] Static, Heap, Stack 메모리  (0) 2024.04.25
JDBC 기초  (0) 2024.03.28
[Java] 상속  (0) 2024.03.20
[Java] 람다식 (Lambda Expression)  (0) 2024.03.14