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 IOExceptionRewinds to before the first row, without landing on a row.
public abstract int getCount() throws IOExceptionReturns the number of rows in the result set, or -1 where a port cannot determine it.

Inherited methods

Method details

beforeFirst

public abstract void beforeFirst() throws IOException

Rewinds 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 IOException

Returns 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

the row count, or -1 where the port cannot determine it

Throws

IOException
if the cursor is closed