결과 집합에는 순방향 전용과 양방향의 두 가지 유형이 있습니다.
결과 집합만 전달: 커서가 한 방향으로만 이동하는 ResultSet 객체를 순방향 전용 ResultSet이라고 합니다. 기본적으로 JDBC 결과 세트는 순방향 전용 결과 세트입니다.
앞으로만 ResultSets의 커서를 이동할 수 있습니다. next() 사용 ResultSet 인터페이스의 메소드 포인터를 현재 위치에서 다음 행으로 이동합니다. 이 메서드는 부울 값을 반환합니다. 현재 위치 옆에 행이 없으면 false를 반환하고, 그렇지 않으면 true를 반환합니다.
따라서 while 루프에서 이 메서드를 사용하면 ResultSet 개체의 내용을 반복할 수 있습니다.
while(rs.next()){ }
예시
아래와 같이 내용이 있는 dataset이라는 테이블이 있다고 가정합니다.
+--------------+-----------+ | mobile_brand | unit_sale | +--------------+-----------+ | Iphone | 3000 | | Samsung | 4000 | | Nokia | 5000 | | Vivo | 1500 | +--------------+-----------+
다음 예는 Dataset의 모든 레코드를 검색합니다. 테이블 및 결과 인쇄:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class RetrievingData { public static void main(String args[]) throws Exception { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/TestDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a Statement object Statement stmt = con.createStatement(); //Retrieving the data ResultSet rs = stmt.executeQuery("select * from Dataset"); System.out.println("Contents of the table"); while(rs.next()) { System.out.print("Brand: "+rs.getString("Mobile_Brand")+", "); System.out.print("Sale: "+rs.getString("Unit_Sale")); System.out.println(""); } } }
출력
Connection established...... Contents of the table Brand: Iphone, Sale: 3000 Brand: Samsung, Sale: 4000 Brand: Nokia, Sale: 5000 Brand: Vivo, Sale: 1500
양방향 결과 집합: 양방향 ResultSet 개체는 커서가 앞뒤로 움직이는 개체입니다.
Connection 인터페이스의 createStatement() 메소드에는 결과 세트 유형과 동시성 유형을 나타내는 두 개의 정수 값을 허용하는 변형이 있습니다.
Statement createStatement(int resultSetType, int resultSetConcurrency)
양방향 결과 세트를 생성하려면 동시성과 함께 ResultSet.TYPE_SCROLL_SENSITIVE 또는 ResultSet.TYPE_SCROLL_INSENSITIVE로 유형을 이 메소드에 다음과 같이 전달해야 합니다.
//Creating a Statement object Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
예시
다음 예는 양방향 ResultSet의 생성을 보여줍니다. 여기서 우리는 테이블 이름 데이터 세트에서 데이터를 검색하는 양방향 ResultSet 객체를 생성하려고 시도하고 previous()를 사용하여 데이터 세트 테이블의 행을 마지막에서 처음으로 인쇄하려고 합니다. 방법.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class BidirectionalResultSet { public static void main(String args[]) throws Exception { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/TestDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a Statement object Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); //Retrieving the data ResultSet rs = stmt.executeQuery("select * from Dataset"); rs.afterLast(); System.out.println("Contents of the table"); while(rs.previous()) { System.out.print("Brand: "+rs.getString("Mobile_Brand")+", "); System.out.print("Sale: "+rs.getString("Unit_Sale")); System.out.println(""); } } }
출력
Connection established...... Contents of the table Brand: Vivo, Sale: 1500 Brand: Nokia, Sale: 5000 Brand: Samsung, Sale: 4000 Brand: IPhone, Sale: 3000