이번 주제에서 알아볼 것은 Java에서 조회한 결과값을 출력하는 방법을 알아보겠습니다.
이번에 데이터베이스를 Mysql에서 Oracle로 바꿨습니다. 주의 해서 봐주시기 바랍니다.
ResultSet(java.sql.ResultSet)은 executeQuery(String sql)을 통해 쿼리 실행하면 ResultSet타입으로 반환을 해주어 결과값을 저장할 수 있다.
- 결과값을 저장할 수 있다.
- 저장된 값을 한 행 단위로 불러올 수 있다.
- 한 행에서 값을 가져올 때는 타입을 지정해 불러올 수 있다.
(이때, sql은 select, show 등을 실행할 목적으로 사용한다. / 자세한 내용은 https://aricode.tistory.com/9를 참고하면 좋다.)
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문을 나오게 된다.
이렇게 하면 모든 조회된 결과값이 출력된것을 확인할 수 있다.
아마 다음달은 PreparedStatement를 소개하게 될거 같습니다.
오늘 DB가 오라클로 바뀌어서 당황하셨을 텐데, 시간이 되면 Mysql 버전도 같이 올리겠습니다!
Mysql 버전 입니다 -> https://aricode.tistory.com/11?category=849051
여담으로 사람과 만나는게 힘든데, 여러분이 제 블로그를 클릭해 주셔서 저도 힘을 내서 글을 작성할 수 있었습니다.
감사합니다!
'Java' 카테고리의 다른 글
[JDBC] PreparedStatement를 이용해 동적으로 SQL 처리하기 (2) | 2020.10.20 |
---|---|
[JDBC] ResultSet을 통해 결과값을 불러오기 - (Mysql 8.0 버전) (0) | 2020.08.16 |
[JDBC] 자바에서 sql문 처리하기 (Statement) (3) | 2020.05.01 |
[JDBC] 자바로 mysql 8 버전 연결하기 (0) | 2020.03.06 |
자바 메모장 파일 작성하기 (FileOutputStream) (0) | 2020.03.05 |