웹개발 교육/Java
[40일] JDBC (14) - 페이징
ewok
2022. 9. 22. 17:49
sungjuk 테이블에서 이름 순으로 정렬 후 행 번호 4~6만 조회하시오
이번에도 번호는 변수로 처리하여 조회하고자 하는 행 번호를 변경할 수 있게 하고자 한다.
먼저 SQL문을 작성하자
--문제) sungjuk 테이블에서 이름 순으로 정렬 후 행 번호 4~6만 조회하시오
1)
SELECT uname, aver, addr
FROM sungjuk
ORDER BY uname;
2) rownum도 같이 정렬된다
SELECT uname, aver, addr, rownum
FROM sungjuk
ORDER BY uname
3) 1)의 결과를 셀프조인하고 rownum 추가하기
SELECT uname, aver, addr, rownum
FROM (
SELECT uname, aver, addr
FROM sungjuk
ORDER BY uname
);
4) 행번호 4~6 조회하기 (결과:조회되지 않음)
SELECT uname, aver, addr, rownum
FROM (
SELECT uname, aver, addr
FROM sungjuk
ORDER BY uname
)
WHERE rownum>=4 and rownum<=6;
5) 3)의 내용을 한번 더 셀프조인하고, 행번호 4~6 조회하기
SELECT *
FROM (
SELECT uname, aver, addr, rownum as rnum
FROM (
SELECT uname, aver, addr
FROM sungjuk
ORDER BY uname
)
)
WHERE rnum>=4 and rnum<=6;
package jdbc0922;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test07_selectPaging {
public static void main(String[] args) {
// 페이징
// 문제) sungjuk 테이블에서 이름 순으로 정렬 후 행 번호 4~6만 조회하시오
int start=4; //시작 행번호
int end=6; //끝 행번호
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "system";
String password = "1234";
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
System.out.println("오라클 DB 서버 연결 성공!!");
StringBuilder sql = new StringBuilder();
sql.append(" SELECT * ");
sql.append(" FROM (\r\n"
+ " SELECT uname, aver, addr, rownum as rnum\r\n"
+ " FROM (\r\n"
+ " SELECT uname, aver, addr\r\n"
+ " FROM sungjuk\r\n"
+ " ORDER BY uname\r\n"
+ " )\r\n"
+ " ) ");
sql.append(" WHERE rnum>=? and rnum<=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, start);
pstmt.setInt(2, end);
rs = pstmt.executeQuery();
if(rs.next()) {
System.out.println("자료있음~~");
do {
System.out.print(rs.getString("uname") + " ");
System.out.print(rs.getInt("aver") + " ");
System.out.print(rs.getString("addr") + " ");
System.out.print(rs.getInt("rnum") + " ");
System.out.println();
} while(rs.next());
} else {
System.out.println("자료없음!!");
}//if end
} catch (Exception e) {
System.out.println("오라클 DB 연결 실패 : " + e);
} finally {
try {
if(rs!=null) {rs.close();}
} catch (Exception e) {}
try {
if(pstmt!=null) {pstmt.close();}
} catch (Exception e) {}
try {
if(con!=null) {con.close();}
} catch (Exception e) {}
}//end
System.out.println("END");
}//main() end
}//class end
여기서는 SELECT *을 사용하였는데, 그 이유는 FROM 안에 칼럼명이 다 노출되어 있어 구체적인 칼럼명을 알 수 있기 때문이다.