JDBC: select 쿼리 작성

0

JDBC

목록 보기
4/4
post-thumbnail

지금까지는 생성에 관한 쿼리만 사용했다.
쿼리를 입력하고 데이터베이스에서 확인만하면 끝이었지만, 데이터베이스에 있는 내용을 조회하는 것은 조금 다르다.

결과셋은 ResultSet이라는 타입으로 받을 수 있고, 내부의 데이터는 메소드를 통해 직접 추출해야 한다.

앞선 create문이나 insert문을 사용하는 코드와 크게 다르진 않다.
결과셋을 불러오는 과정이 추가된다.

또한 executeUpdate() 대신 executeQuery()를 사용하는 것도 차이점으로 볼 수 있다.
(링크 최하단 참조)

	// 테이블 내용 불러오기 
	public void selectTable(String tbName) throws SQLException {
		String sql = "select * from "+tbName;
		
		Connection con = ConnectionManager.getConnection();
		PreparedStatement pstmt = con.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		
		pstmt.close();
		con.close();
		
		int no = 0;
		String name = "";
		String manufacturing = "";
		int price = 0;
		
		while(rs.next()) {
			no = rs.getInt(1);
			name = rs.getString(2);
			manufacturing = rs.getString(3);
			price = rs.getInt(4);
			
			System.out.println("No:"+no+" / "+"name:"+name+" / "+"manufacturing:"+manufacturing+" / "+"price:"+price);
		}
	}// selectTable()

이 쿼리를 작성하면서 알게 된 사실은...
바인드 변수(?)는 반드시 칼럼의 값을 대체해야 한다는 점이다.

테이블 명을 선택하게 하려고

String sql = "select * from ?";

위와 같이 바인드 변수를 설정해도 쿼리 예외가 생길 뿐이다.
테이블명과 칼럼명은 바인드 변수로 설정할 수가 없다.

따라서,

String sql = "select * from "+tbName;

이렇게 tbName 자체를 문자열 결합으로 묶어줬다.
from 뒤의 공백에 주목한다.

일단, 위와 같은 코드 구성으로 select절의 결과셋을 ResultSet에 저장한 상태를 마련하였다.

ResultSetexecuteQuery()의 반환값(쿼리의 결과셋)을 받아오기 위한, 정해진 틀이다.

레코드 즉, 한 행(row) 단위로 데이터가 저장된다.
next() 메서드를 사용하여 한 행씩 넘겨간다.

int no = 0;
		String name = "";
		String manufacturing = "";
		int price = 0;
		
        /* 결과셋 rs를 next()메서드를 통해 한 행씩 조회한다 */
		while(rs.next()) {
			no = rs.getInt(1);
			name = rs.getString(2);
			manufacturing = rs.getString(3);
			price = rs.getInt(4);
			
			System.out.println("No:"+no+" / "+"name:"+name+" / "+"manufacturing:"+manufacturing+" / "+"price:"+price);
		}

getInt()getString()의 파라미터는, 칼럼의 이름 또는 순서다.
위 쿼리에서 가져온 toys테이블의 한 행은 다음과 같이 구성되어 있다.

MariaDB [jdbc]> desc toys;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| no            | int(11)     | NO   | PRI | NULL    | auto_increment |
| name          | varchar(20) | NO   |     | NULL    |                |
| manufacturing | varchar(20) | NO   |     | NULL    |                |
| price         | int(11)     | NO   |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+
4 rows in set (0.006 sec)

여기서 칼럼 'no'는 Int 타입이면서 첫 번째 칼럼이다.
따라서 칼럼 'no'의 값을 가져오기 위해서는 getInt(1) 또는 getInt('no')를 사용한다.

칼럼 'name'은 문자열 즉, String 클래스이면서 두 번째 칼럼이다.
따라서 칼럼 'name'의 값을 가져오기 위해서는 getString(2) 또는 getString('name')을 사용해야 할 것이다.

이렇게 가져오는 값을 출력하거나 변수에 받아서 원하는 대로 사용할 수 있게 된다.

0개의 댓글