bangandi
bangandi

Reputation: 179

Go to last row from result set in jdbc with sql server

i try to select from my table, only select the last row. I've tried this :

rset = s.executeQuery("select noorder from orders");
rset.last();
String noorder = rset.getString("noorder");`

rset is resultset, and s is statement. But it throw an exception : ResultSet may only be accessed in a forward direction`

I've tried this to :

if (rset != null) {                
   while(rset.next()){
       rset.last();
   }
}

Am I doing wrong? Any idea? Thanks

Edit : This is the answer, as suggested by @Bhavik-Ambani (thanks for him). And this is my code :

        Statement s2 = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        rset = s2.executeQuery("select noorder from orders");
        rset.afterLast();
        GETLASTINSERTED:
        while(rset.previous()){
            noorder = rset.getString("noorder");
            break GETLASTINSERTED;//to read only the last row
        }

Hope it will be help another. Java rocks!

Upvotes: 6

Views: 40747

Answers (5)

user14664489
user14664489

Reputation: 11

You can use: connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

Upvotes: 1

corepress
corepress

Reputation: 1125

The isLast() should be what you're looking for.

ResultSet rs = stmt.executeQuery(query);

while(rs.next()) {
  if(rs.isLast()) {
      // is last row in ResultSet
  }
}

Upvotes: 2

AW101
AW101

Reputation: 1640

Remember to apply an order by clause otherwise the last entry in your ResultSet may not be what you expect.

Upvotes: 1

Grant
Grant

Reputation: 4543

rset = s.executeQuery("SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1");

String noorder = rset.getString("noorder");`

Upvotes: 0

Bhavik Ambani
Bhavik Ambani

Reputation: 6657

A default ResultSet object is not updatable and has a cursor that moves forward only. Thus, you can iterate through it only once and only from the first row to the last row.

At code level you can do the following thing

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet resultSet = statement.executeQuery("select noorder from orders");
resultSet.afterLast();
while (resultSet.previous()) {
  String productCode = resultSet.getString("col_one");
  String productName = resultSet.getString("col_two");

}
connection.close();

Upvotes: 6

Related Questions