본문 바로가기

Java

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

이번 주제에서 알아볼 것은 Java에서 조회한 결과값을 출력하는 방법을 알아보겠습니다.

이번에 데이터베이스를 Mysql에서 Oracle로 바꿨습니다. 주의 해서 봐주시기 바랍니다.


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

 

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

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

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

 

(이때, sql은 select, show 등을 실행할 목적으로 사용한다. / 자세한 내용은 https://aricode.tistory.com/9를 참고하면 좋다.)

 

[JDBC] 자바에서 sql문 처리하기 (Statement)

이번 주제에서 알아볼 것은 Java에서 SQL을 처리하는 방법을 알아보겠습니다. Statement (java.sql.Statement)는 Connection으로 연결한 객체에게, Query 작업을 실행하기 위한 객체.  - 정적인..

aricode.tistory.com

 

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();
	}

}

 

 

ResultSetStatement를 통해 값을 저장할 수 있다.

이때, 사용하는 메소드는 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()의 결과값이 TRUEFALSE로 반환되기 때문에, 다음으로 넘어갈 행이 없으면 while문을 나오게 된다.

 

 

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

 

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

 

아마 다음달은 PreparedStatement를 소개하게 될거 같습니다.

오늘 DB오라클로 바뀌어서 당황하셨을 텐데, 시간이 되면 Mysql 버전도 같이 올리겠습니다!

Mysql 버전 입니다 -> https://aricode.tistory.com/11?category=849051

 

여담으로 사람과 만나는게 힘든데, 여러분이 제 블로그를 클릭해 주셔서 저도 힘을 내서 글을 작성할 수 있었습니다.

감사합니다!