[JDBC] ResultSet 결과값을 불러오기

핑구·2022년 4월 21일
0

ResultSet(java.sql.ResultSet)은 executeQuery(String sql)을 통해 쿼리 실행하면 ResultSet타입으로 반환을 해주어 결과값을 저장할 수 있다.

  • 결과값을 저장할 수 있다.

  • 저장된 값을 한 행 단위로 불러올 수 있다.

  • 한 행에서 값을 가져올 때는 타입을 지정해 불러올 수 있다.

package jdbc;

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

public class OJDBC {

private Connection con;
private Statement stmt;
private ResultSet rs;

public OJDBC() {
	try {
		String OracleUrl = "jdbc:oracle:thin:@localhost:1521:XE";
		String OracleUser = "system";
		String OraclePasswd = "1234";

		con = DriverManager.getConnection(OracleUrl, OracleUser, OraclePasswd);
		System.out.println("DB연결 성공");

		stmt = con.createStatement();
		System.out.println("Statement객체 생성 성공");
		
		rs = stmt.executeQuery("select * from coffee"); //조회한 결과들을 ResultSet에 rs에 저장한다.
		
		rs.close();
		stmt.close();
		con.close();

	} catch (SQLException e) {
		System.out.println("DB연결 실패하거나, SQL문이 틀렸습니다.");
		System.out.print("사유 : " + e.getMessage());
	}
}

public static void main(String[] args) {
	// TODO Auto-generated method stub
	new OJDBC();
}

}

ResultSet은 Statement를 통해 값을 저장할 수 있다.

이때, 사용하는 메소드는 executeQuery(String sql) 메소드를 통해 저장할 수 있다.

next() 메소드를 통해, 선택되는 행을 바꿀 수 있다.

그리고, 다음행이 내려갈 다음행이 있을 경우 TRUE를 반환하고, 없을 경우 FALSE를 반환한다.

커서가 현재 아무행도 가르키지 않고 있다.

위 이미지에서 커서가 현재 아무것도 가리키지 않아, 만약 getString() / getInt()등 메소드를 사용했을 경우 에러가 발생한다.

커서가 한칸이 내려갔다

그래서 next() 메소드를 실행하면 위와 같이 커서가 잡하게 된다.

get타입() 메소드를 통해 데이터를 불러올 수 있다.

많은 타입을 지정할 수 있다.

get타입은 컬럼의 숫자나, 컬럼의 이름을 지정해서 값을 불러 올 수 있게 된다.

예시) c_no의 INT형 컬럼이 있다. 이 컬럼의 번호는 1번째 이다. 그러면 getInt(1) 이나 / getInt("c_no")를 통해 불러올 수 있다.

package jdbc;

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

public class OJDBC {

private Connection con;
private Statement stmt;
private ResultSet rs;

public OJDBC() {
	try {
		String OracleUrl = "jdbc:oracle:thin:@localhost:1521:XE";
		String OracleUser = "system";
		String OraclePasswd = "1234";

		con = DriverManager.getConnection(OracleUrl, OracleUser, OraclePasswd);
		System.out.println("DB연결 성공");

		stmt = con.createStatement();
		System.out.println("Statement객체 생성 성공");
		
		rs = stmt.executeQuery("select * from coffee"); //조회한 결과들을 ResultSet에 rs에 저장한다.
		
		while(rs.next()) { //rs.next()를 통해 다음행을 내려갈 수 있으면 true를 반환하고, 커서를 한칸 내린다. 다음행이 없으면 false를 반환한다.
			System.out.println(rs.getInt(1) + "\t" + rs.getString(2)); //getInt(1)은 컬럼의 1번째 값을 Int형으로 가져온다. / getString(2)는 컬럼의 2번째 값을 String형으로 가져온다.
		}
		
		rs.close();
		stmt.close();
		con.close();

	} catch (SQLException e) {
		System.out.println("DB연결 실패하거나, SQL문이 틀렸습니다.");
		System.out.print("사유 : " + e.getMessage());
	}
}

public static void main(String[] args) {
	// TODO Auto-generated method stub
	new OJDBC();
}

}
위 코드처럼 작성을 할경우 rs.next()의 결과값이 TRUE와 FALSE로 반환되기 때문에, 다음으로 넘어갈 행이 없으면 while문을 나오게 된다.

결과값들이 모두 출력됬다.

이렇게 하면 모든 조회된 결과값이 출력된것을 확인할 수 있다.

0개의 댓글