How to move the ResultSet cursor to the previous row in JDBC?


Whenever we execute SQL statements using the executeQuery() method, it returns a ResultSet object which holds the tabular data returned by the SELECT queries(in general).

The ResultSet object contains a cursor/pointer which points to the current row. Initially this cursor is positioned before first row (default position).

You can move the cursor of the ResultSet object to the previous row from the current position, using the previous() method of the ResultSet interface.

rs.previous()

This method returns a boolean value specifying whether the ResultSet object contains more rows. If there are no rows before its current position this method returns false, else it returns true.

Let us create a table with name tutorials_data in MySQL database using CREATE statement as shown below −

CREATE TABLE tutorials_data(
   tutorial_id INT,
   tutorial_title VARCHAR(100),
   tutorial_author VARCHAR(40),
   submission_date date,
   PRIMARY KEY (tutorial_id)
);

Now, we will insert 5 records in tutirials_data table using INSERT statements −

insert into tutorials_data values(1, 'Java', 'Krishna Kasyap', DATE('2019-09-01'));
insert into tutorials_data values(2, 'JFreeCharts', 'Satish Kumar', DATE('2019-05-01 '));
insert into tutorials_data values(3, 'JavaSprings', 'Amit Tiwari', DATE(' 2019-05-01'));
insert into tutorials_data values(4, 'Android', 'Sai Ram', DATE('2019-03-01'));
insert into tutorials_data values(5, 'Cassandra', 'Pruthvi Raj', DATE(' 2019-04-06'));

In the following JDBC program we have established connection with the database and retrieved the contents of the table named tutorials_data into a ResultSet object, initially the cursor in this object will be at the default position (before first row), We have repositioned the cursor to the end of the result set by invoking the afterLast() method and then, using the previous() method we have moved the cursor from the end to the last row, from last row to the second row and, displayed the contents of the both rows.

Example

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class RSCursor_previous {
   public static void main(String args[]) throws SQLException {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/mydb";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating the Statement
      Statement stmt = con.createStatement();
      //Query to retrieve records
      String query = "Select * from tutorials_data";
      //Executing the query
      ResultSet rs = stmt.executeQuery(query);
      //Moving the cursor to the end of the ResultSet
      rs.afterLast();
      //Moving the cursor to the last row.
      rs.previous();
      System.out.println("Contents of the last record: ");
      //Current record details.
      System.out.print("ID: "+rs.getInt("tutorial_id")+", ");
      System.out.print("Title: "+rs.getString("tutorial_title")+", ");
      System.out.print("Author: "+rs.getString("tutorial_author")+", ");
      System.out.print("Submission date: "+rs.getDate("submission_date"));
      System.out.println();
      //Moving the cursor to the 2nd row.
      rs.previous();
      System.out.println("Contents of the second record: ");
      //Current record details.
      System.out.print("ID: "+rs.getInt("tutorial_id")+", ");
      System.out.print("Title: "+rs.getString("tutorial_title")+", ");
      System.out.print("Author: "+rs.getString("tutorial_author")+", ");
      System.out.print("Submission date: "+rs.getDate("submission_date"));
      System.out.println();
   }
}

Output

Connection established......
Contents of the last record:
ID: 5, Title: Cassandra, Author: Pruthvi Raj, Submission date: 2019-04-06
Contents of the second record:
ID: 4, Title: Android, Author: Sai Ram, Submission date: 2019-03-01

Rishi Raj
Rishi Raj

I am a coder

Updated on: 30-Jul-2019

580 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements