PreparedStatement (인터페이스)
prestatement
PreparedStatement pstmt = null;
// SQL 구문
String sql = "SELECT count(*) FROM member WHERE member_id != ? AND member_email = ?";
// SQL, 인자(선)처리
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, memberId);
pstmt.setString(2, memberEmail);
// pstmt.setString(3, "member");
rs = pstmt.executeQuery();
PreparedStatement 객체는 Connection 객체의 preparedStatement( ) 메소드를 사용해서 생성한다. 이 메소드는 인수로 SQL문을 담은 String객체가 필요하다.
(sql구문을 db객체에 전달해주는 접점 역할을 한다.)
SQL문장이 미리 컴파일되고, 실행 시간동안 인수값을 위한 공간을 확보할 수 있다는 점에서 Statement 객체와 다르다.
Statement 객체의 SQL은 실행될 때 매번 서버에서 분석해야 하는 반면, PreparedStatement 객체는 한 번 분석되면 재사용이 용이하다.
각각의 인수에 대해 위치홀더(placeholder)를 사용하여 SQL문장을 정의할 수 있게 해준다. 위치홀더는 ? 로 표현된다.\
sql문을 pstmt에 옮겨담고 각 와일드카드에 set 구문을 활용하여 입력한다.
동일한 SQL문을 특정 값만 바꾸어서 여러 번 실행해야 할 때, 인수가 많아서 SQL문을 정리해야 될 필요가 있을 때 사용하면 유용하다.
쿼리를 실행할 수 있다.
insert, update, delete 등 값을 받아오지 않는 쿼리문들은
executeUpdate() 메소드를 이용해 실행한다.
몇개의 행이 수정이 되었는지를 int형을 리턴 값으로 받아오며 리턴 값으로 위와 같이 쿼리가 정상적으로 작동했는지 점검할 수 있다.
resultset
// SQL 결괴셋 객체 생성
ResultSet rs = null;
/*
중략
*/
rs = pstmt.executeQuery();
if(rs.next()) {
result = rs.getInt(1) == 0 ? true : false;
}
statement를 통해 sql쿼리 결과값을 저장할 수 있다.
executeQuery() 메소드로 저장된 쿼리를 실행할 수 있다.
실행된 쿼리결과는 rs 변수에 대입된다.
rs.next() 메소드를 통해 다음에 꺼내올 행이 있는지 검사하고 있으면 true, 없으면 false를 반환한다.
만약 next메소드를 통해 확인한 행을 꺼내려면
getInt() / getString() 메소드를 통해 갖고올 수 있다.
get메소드에는 수 많은 타입이 있다.
get타입은 컬럼의 숫자 혹은 이름을 지정해서 값을 부를 수 있다.
만약 memberId 컬럼의 번호가 1번째라면
getString(1)를 통해 부를 수 있고 getString(memberId)로도 부를 수 있다.
'JAVA > JDBC' 카테고리의 다른 글
[MyBatis] ResultHandler에 대해 (0) | 2023.09.12 |
---|