public interface CursorExt
ExtendsCursor
Optional cursor capabilities, in the same spirit as RowExt.
These are not on Cursor itself because that interface is public and is
implemented outside this repository; adding a method to it would break every
third party library that provides one. Reach these through the static helpers
on Database, which degrade gracefully on a cursor that does not implement
this interface:
Database.beforeFirst(cursor);
int rows = Database.count(cursor); // -1 when the port cannot say cheaply
Every cursor returned by a Codename One port implements this.
Methods
public abstract void beforeFirst()
throws IOException | Rewinds to before the first row, without landing on a row. |
public abstract int getCount()
throws IOException | Returns the number of rows in the result set, or -1 where a port cannot determine it. |
Inherited methods
From Cursor
first, last, next, prev, getColumnIndex, getColumnName, getColumnCount, getPosition, position, close, getRow
Method details
beforeFirst
public abstract void beforeFirst()
throws IOExceptionRewinds to before the first row, without landing on a row.
After this call Cursor#getPosition() reports -1 and Cursor#getRow()
throws, exactly as on a freshly returned cursor. This is the operation
Cursor#position(int) performs when given -1.
Throws
IOException- if the cursor is closed or the rewind fails
getCount
public abstract int getCount()
throws IOExceptionReturns the number of rows in the result set, or -1 where a port cannot determine it.
This can be expensive. Ports whose engine already tracks the count – Android – report
it directly. Ports backed by a forward-only statement, which is the rest of them, answer by
walking: rewind, step through every row, and rewind again. That is a full scan of the
result set, so calling it on a large query costs what the query costs, and doing so on the
EDT stops the application for that long. The count is remembered afterwards, and a rewind
through #beforeFirst() drops it, since the next pass may not see the same rows.
-1 means the port cannot answer at all. Treat it as “unknown”, not as “empty”.
Returns
Throws
IOException- if the cursor is closed