자바에서 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 |