본문 바로가기

JAVA/JDBC

[JDBC] prestatement, result set

728x90

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