JDBC : Statement

ROK·2022년 8월 9일
0

JDBC

목록 보기
2/4

앞에 Connection을 완료해 연결이 됐다면, Statement를 사용할 차례이다.

statement 클래스의 execute 메서드를 사용해 쿼리를 내보내고, 그 결과값을 ResultSet을 통해 받는다.

Statement 클래스

statement 클래스는 SQL 쿼리를 전달 및 실행하는 역할을 한다

Statement의 주요 메서드

  • execute() : execute는 SQL 쿼리를 실행하고 boolean 값을 반환한다.
    • 리턴값이 ResultSet일 경우 true, 아니면 false를 출력
    • 리턴타입 : boolean, 매개변수 : String sql
  • executeQuery() : SQL문을 실행하고 ResultSet 형식의 결과를 리턴한다.
    • 주로 조회문(select, show)에 사용된다.
    • 리턴타입 : ResultSet, 매개변수 : String sql
  • executeUpdate() : insert, update, delete 문을 실행하고 영향을 받은 레코드의 갯수나 0을 반환한다. 실패할 경우 에러 반환
    • 0은 create, drop, alter 문일때 반환, select 문에서는 사용하지 않는다
    • 리턴타입 : int, 매개변수 : String sql
  • close() : statement의 리소스를 반납한다
    • 리턴타입 : void

각 메서드의 매개변수 String sql은 쿼리로, 일반적으로 미리 변수로 작성해둔다.

Statement 예제

package test;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class DAO {
	
	public boolean createTable() throws SQLException {
		boolean flag = false;
		
		String sql = "create table toys (";
				sql += "No int primary key not null auto_increment, ";
				sql += "name varchar(20) not null, ";
				sql += "manufacturing varchar(20) not null, ";
				sql += "price int not null ";
				sql += ")";
		
		Connection con = ConnectionManager.getConnection();
		Statement stmt = con.createStatement();
		int affectedCount = stmt.executeUpdate(sql);
		
		System.out.println("쿼리의 반환값은 : " + affectedCount);
		
		if (affectedCount == 0) {
			flag = true;
		}

		stmt.close();
        con.close();
        
		return flag;
	}
}

위 코드를 보면서 하나씩 알아보자

  1. String sql 변수를 선언하면서 쿼리를 미리 작성

  2. ConnectionManager 클래스의 getConnection() 메서드를 실행해 con 변수에 초기화

  3. createStatement() 메서드로 쿼리 실행 객체를 생성

  4. executeUpdate(sql) 메서드를 사용해 쿼리를 전송하고, 결과를 받아 affectedCount 변수에 초기화

  5. 실행의 역순으로 close()를 진행해준다.

  6. return 값으로 boolean을 받는 이유는 결과가 내가 원하는 대로 갔는지 확인하기 위한 확인용

그럼 이제 위에 작성한 코드를 실행할 Main 클래스를 만들어준다.

package test;

import java.sql.SQLException;

public class DAOMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DAOMain main = new DAOMain();
 		main.MakeTable();	
	}
	
	public void MakeTable() {
		DAO dao = new DAO();
		
		try {
			dao.createTable();
			System.out.println("테이블 생성 성공");
		} catch (SQLException e) {
			System.out.println("테이블 생성 실패");
			e.printStackTrace();
		}
	}
}

Main에서 바로 실행하지 않고 MakeTable()메서드를 만들고 예외처리를 해준다.
그리고 Main에서 실행하는 것으로 마무리했다.

위 Main 클래스를 실행하면 아주 성공적으로 결과값이 나오는 것을 확인할 수 있다.

보충

ResultSet

ResultSet은 위에서 설명했던 executeQuery() 메서드의 결과로 반환되는 값이다.

간단히 이해하자면 Java에 DB를 복사해 임시저장한다고 생각하면된다.

복사할 때는 한 행(레코드) 단위로 불러올 수 있고, get자료형() 메서드로 불러온 레코드의 칼럼값에 접근할 수 있다.

사용 예제

ResultSet rs = stmt.executeQuery();
rs.getInt(1);
rs.getString(2);
profile
하루에 집중하자

0개의 댓글