본문 바로가기

언어공부/JDBC&오라클&SQL

JDBC - select문 실행(statement / preparedStatement 인터페이스 별로 작성)

JDBC -  select문 실행(statement / preparedStatement 인터페이스 별로 작성)에 대해서 알아보자.

JDBC - select문 실행

select문은 데이터베이스로부터 데이터를 쿼리하고 출력한다. SELECT문을 실행할 때 사용되는 것이 Connection, Statement, ResultSet 인터페이스이다.

 

  • Connection 인터페이스 : 자바와 데이터베이스 사이의 연결을 담당한다.
  • Statement 인터페이스 : SQL문장을 실행한다.
  • ResultSet 인터페이스 : SQL문장의 실행결과를 가지고 있다. (SELECT문에서만 사용, 수행 후 결과 레코드 행 저장)

 SELECT문에서는 executeQuery()메소드를 사용하며, ResultSet 객체에 SELECT문장에 의하여 추출된 모든 레코드가 저장된다. 여기서 한번에 하나의 레코드만 접근할 수 있기 때문에  while(rows.next()){}; 결과 집합에서 레코드를 하나씩 처리한다.

 

여기서 추가로 Statement 인터페이스와  preparedStatement 인터페이스를 각각 코드를 작성해보았다.

 

Statement와 preparedStatement를 비교했을 때, preparedStatement는 Statement를 상속받았으며 미리 컴파일이 되어있다는 뜻으로, 객체 생성시에 지정된 sql명령어만 실행할 수 있다.(다른 sql문은 실행 못함. 재사용x).

SQL문에서 변수자리에 "?"로 표시하며, set메소드를 통해 값을 설정한다(코드라인이 더 길어진다). Stament보다 가독성이 높고, 성능도 좋으며, 인자값으로 전달이 가능하다는 특징이 있다. 

 

Statement객체는 실행 시 sql명령어를 지정하여 여러 sql구문을 하나의 statement객체로 수행이 가능해 재사용이 가능하다.

 

<select문 statement인터페이스 사용>

 

 

 

Class.forName()메소드로 jdbc드라이버를 로드하고, DriverManager.getConnection()로 데이터베이스와 연결한다. con.createStatement()로 st 객체를 생성하고, SQL문을 생성해 executeQuery(sql)로 SQL문장을 실행한다.

 

그리고 executeQuery()메소드에 의해 반환된 ResultSet 객체에는 SELECT문장에 의해 추출된 모든 레코드가 들어 있고, 한 번에 하나의 레코드를 처리하기 위해 while문을 작성해 출력한다.

 

여기서는 컬럼을 이름으로 접근해 컬럼의 값을 출력했다.

 

실행화면

 

 


<select문 preparedStatement인터페이스 사용>

 

 

Class.forName()메소드로 jdbc드라이버를 로드하고, DriverManager.getConnection()로 데이터베이스와 연결한다. 여기서 Statement와 다른점은 sql문을 먼저 생성하고 con.prepareStatement(sql);로 쿼리문을 미리 컴파일하여 실행해 pstmt생성한다. 그 후 executeQuery()를 실행해 반환된 ResultSet 객체에는 SELECT문장에 의해 추출된 모든 레코드가 들어 있고, 한 번에 하나의 레코드를 처리하기 위해 while문을 작성해 출력한다.

 

여기서는 컬럼을 번호로 접근해 컬럼의 값을 출력했다.

 

실행화면

둘 다 실행화면은 동일하다.

 

추가로 해당 코드 SQL문에서 SELECT *로 조건 없이 모든 테이블을 출력하기 때문에 변수가 필요 없어 "?"를 사용하지 않았다. "?"를 사용하려면 아래와 같이 조건절로 코드를 하면 된다.

 

 

where조건절 뒤에 btitle=?로 주었는데,  그 뒤에 set메소드를 통해 값을 설정해주면 된다. 앞의 1은 첫 번째물음표를 뜻한다. 만약에 물음표가 여러개면 해당 위치의 물음표를 지정해준다. 뒤에는 해당 물음표에 들어가는 변수값이다. 스캐너 클래스로 검색할 제목을 입력받아 title변수로 저장하고, 해당 값을 물음표에 설정해준다.

 

실행화면 1(검색 내용 있을 때)

 

여기서 수정으로 검색을 했다면, SQL문에서는 "select * from find_board where btitle="+"'수정'"으로 들어가는 셈이다.

 

실행화면 2(검색 내용 없을 때)