Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

JDBC에는 몇 가지 유형의 결과 집합이 있습니까?

<시간/>

결과 집합에는 순방향 전용과 양방향의 두 가지 유형이 있습니다.

결과 집합만 전달: 커서가 한 방향으로만 이동하는 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