- Type Parameters:
R- The cursor's record type
- All Superinterfaces:
AutoCloseable,Fields,Formattable,Iterable<R>
ResultSet. Unlike Result, data can only be accessed
sequentially, using an Iterator, or the cursor's hasNext()
and fetch() methods.
Client code must close this Cursor in order to close the underlying
PreparedStatement and ResultSet
The cursor can be consumed in two ways:
- Record by record: Such methods can be recognised by the term "Next" in
the method name, e.g.
fetchNext(int). - Completely in one go: Such methods do not have the term "Next" in their
method names, e.g.
fetch().
Note: Unlike usual implementations of Iterable, a Cursor
can only provide one Iterator!
- Author:
- Lukas Eder
-
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Explicitly close the underlyingPreparedStatementandResultSet.<X,A> X Reduce the execution results of this query using aCollector.fetch()Fetch all remaining records as a result.fetch(int number) Deprecated, for removal: This API element is subject to removal in a future version.<E> @NotNull List<E> fetch(RecordMapper<? super R, E> mapper) Fetch results into a custom mapper callback.<H extends RecordHandler<? super R>>
HfetchInto(H handler) Deprecated, for removal: This API element is subject to removal in a future version.- 3.15.0 - [#11902] - UseIterable.forEach(Consumer)based methods, instead.<E> @NotNull List<E> Map resulting records onto a custom type.Map resulting records onto a custom record.Fetch the next record from the cursor.fetchNext(int number) Fetch the next couple of records from the cursor.<E> EfetchNext(RecordMapper<? super R, E> mapper) Fetch the next record into a custom mapper callback.<H extends RecordHandler<? super R>>
HfetchNextInto(H handler) Deprecated, for removal: This API element is subject to removal in a future version.- 3.15.0 - [#11902] - UseIterable.forEach(Consumer)based methods, instead.<E> EfetchNextInto(Class<? extends E> type) Map the next resulting record onto a custom type.<Z extends Record>
ZfetchNextInto(Table<Z> table) Map the next resulting record onto a custom record.Fetch the next record from the cursor.<E> @NotNull Optional<E> fetchNextOptional(RecordMapper<? super R, E> mapper) Fetch the next record into a custom mapper callback.<E> @NotNull Optional<E> fetchNextOptionalInto(Class<? extends E> type) Map the next resulting record onto a custom type.fetchNextOptionalInto(Table<Z> table) Map the next resulting record onto a custom record.fetchOne()Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNext()instead.<E> EfetchOne(RecordMapper<? super R, E> mapper) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNext(RecordMapper)instead.<H extends RecordHandler<? super R>>
HfetchOneInto(H handler) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextInto(RecordHandler)instead.<E> EfetchOneInto(Class<? extends E> type) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextInto(Class)instead.<Z extends Record>
ZfetchOneInto(Table<Z> table) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextInto(Table)instead.Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptional()instead.<E> @NotNull Optional<E> fetchOptional(RecordMapper<? super R, E> mapper) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptional(RecordMapper)instead.<E> @NotNull Optional<E> fetchOptionalInto(Class<? extends E> type) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptionalInto(Class)instead.fetchOptionalInto(Table<Z> table) Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptionalInto(Table)instead.booleanhasNext()Check whether this cursor has a next record.booleanisClosed()Check whether thisCursorhas been explicitly or "conveniently" closed.@NotNull RecordType<R> Get this cursor's row type.@Nullable ResultSetGet theCursor's underlyingResultSet.stream()Turn thisCursorinto aStream.Methods inherited from interface org.jooq.Fields
dataType, dataType, dataType, dataTypes, field, field, field, field, field, field, field, field, field, field, fields, fields, fields, fields, fields, fieldsIncludingHidden, fieldsRow, fieldStream, indexOf, indexOf, indexOf, type, type, type, typesMethods inherited from interface org.jooq.Formattable
format, format, format, format, format, format, format, format, format, formatChart, formatChart, formatChart, formatChart, formatChart, formatChart, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatCSV, formatHTML, formatHTML, formatHTML, formatInsert, formatInsert, formatInsert, formatInsert, formatInsert, formatInsert, formatJSON, formatJSON, formatJSON, formatJSON, formatJSON, formatJSON, formatXML, formatXML, formatXML, formatXML, formatXML, formatXML, intoXML, intoXML, intoXML, intoXMLMethods inherited from interface java.lang.Iterable
forEach, iterator, spliterator
-
Method Details
-
recordType
Get this cursor's row type. -
hasNext
Check whether this cursor has a next record.This will conveniently close the
Cursor, after the lastRecordwas fetched.- Throws:
DataAccessException- if something went wrong executing the query
-
fetch
Fetch all remaining records as a result.This will conveniently close the
Cursor, after the lastRecordwas fetched.The result and its contained records are attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Throws:
DataAccessException- if something went wrong executing the query
-
fetch
@NotNull @Deprecated(forRemoval=true, since="3.10") @NotNull Result<R> fetch(int number) throws DataAccessException Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNext(int)instead.- Throws:
DataAccessException
-
fetchNext
Fetch the next couple of records from the cursor.This will conveniently close the
Cursor, after the lastRecordwas fetched.The result and its contained records are attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Parameters:
number- The number of records to fetch. If this is0or negative an empty list is returned, the cursor is untouched. If this is greater than the number of remaining records, then all remaining records are returned.- Throws:
DataAccessException- if something went wrong executing the query
-
fetchInto
@Deprecated(forRemoval=true, since="3.15") @NotNull <H extends RecordHandler<? super R>> H fetchInto(H handler) throws DataAccessException Deprecated, for removal: This API element is subject to removal in a future version.- 3.15.0 - [#11902] - UseIterable.forEach(Consumer)based methods, instead.Fetch results into a custom handler callback.The resulting records are attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Parameters:
handler- The handler callback- Returns:
- Convenience result, returning the parameter handler itself
- Throws:
DataAccessException- if something went wrong executing the query
-
fetch
Fetch results into a custom mapper callback.- Parameters:
mapper- The mapper callback- Returns:
- The custom mapped records
- Throws:
DataAccessException- if something went wrong executing the query
-
fetchInto
@NotNull <E> @NotNull List<E> fetchInto(Class<? extends E> type) throws DataAccessException, MappingException Map resulting records onto a custom type.This is the same as calling
fetch().into(type). SeeRecord.into(Class)for more details- Type Parameters:
E- The generic entity type.- Parameters:
type- The entity type.- Throws:
DataAccessException- if something went wrong executing the queryMappingException- wrapping any reflection or data type conversion exception that might have occurred while mapping records- See Also:
-
fetchInto
@NotNull <Z extends Record> @NotNull Result<Z> fetchInto(Table<Z> table) throws DataAccessException, MappingException Map resulting records onto a custom record.This is the same as calling
fetch().into(table). SeeRecord.into(Class)for more detailsThe result and its contained records are attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Type Parameters:
Z- The generic table record type.- Parameters:
table- The table type.- Throws:
DataAccessException- if something went wrong executing the queryMappingException- wrapping any reflection or data type conversion exception that might have occurred while mapping records- See Also:
-
fetchOne
Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNext()instead.- Throws:
DataAccessException
-
fetchOneInto
@NotNull @Deprecated(forRemoval=true, since="3.10") <H extends RecordHandler<? super R>> H fetchOneInto(H handler) throws DataAccessException Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextInto(RecordHandler)instead.- Throws:
DataAccessException
-
fetchOne
@Nullable @Deprecated(forRemoval=true, since="3.10") <E> E fetchOne(RecordMapper<? super R, E> mapper) throws DataAccessExceptionDeprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNext(RecordMapper)instead.- Throws:
DataAccessException
-
fetchOneInto
@Nullable @Deprecated(forRemoval=true, since="3.10") <Z extends Record> Z fetchOneInto(Table<Z> table) throws DataAccessException, MappingException Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextInto(Table)instead.- Throws:
DataAccessExceptionMappingException
-
fetchNext
Fetch the next record from the cursor.This will conveniently close the
Cursor, after the lastRecordwas fetched.The resulting record is attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Returns:
- The next record from the cursor, or
nullif there is no next record. - Throws:
DataAccessException- if something went wrong executing the query
-
fetchNextInto
@Deprecated(forRemoval=true, since="3.15") @NotNull <H extends RecordHandler<? super R>> H fetchNextInto(H handler) throws DataAccessException Deprecated, for removal: This API element is subject to removal in a future version.- 3.15.0 - [#11902] - UseIterable.forEach(Consumer)based methods, instead.Fetch the next record into a custom handler callback.This will conveniently close the
Cursor, after the lastRecordwas fetched.The resulting record is attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Parameters:
handler- The handler callback- Returns:
- Convenience result, returning the parameter handler itself
- Throws:
DataAccessException- if something went wrong executing the query
-
fetchOneInto
@Nullable @Deprecated(forRemoval=true, since="3.10") <E> E fetchOneInto(Class<? extends E> type) throws DataAccessException, MappingException Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextInto(Class)instead.- Throws:
DataAccessExceptionMappingException
-
fetchNextInto
Map the next resulting record onto a custom type.This is the same as calling
fetchOne().into(type). SeeRecord.into(Class)for more details- Type Parameters:
E- The generic entity type.- Parameters:
type- The entity type.- Throws:
DataAccessException- if something went wrong executing the queryMappingException- wrapping any reflection or data type conversion exception that might have occurred while mapping records- See Also:
-
fetchNext
Fetch the next record into a custom mapper callback.This will conveniently close the
Cursor, after the lastRecordwas fetched.- Parameters:
mapper- The mapper callback- Returns:
- The custom mapped record
- Throws:
DataAccessException- if something went wrong executing the query
-
fetchNextInto
@Nullable <Z extends Record> Z fetchNextInto(Table<Z> table) throws DataAccessException, MappingException Map the next resulting record onto a custom record.This is the same as calling
fetchOne().into(table). SeeRecord.into(Class)for more detailsThe resulting record is attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Type Parameters:
Z- The generic table record type.- Parameters:
table- The table type.- Throws:
DataAccessException- if something went wrong executing the queryMappingException- wrapping any reflection or data type conversion exception that might have occurred while mapping records- See Also:
-
fetchOptional
@NotNull @Deprecated(forRemoval=true, since="3.10") @NotNull Optional<R> fetchOptional() throws DataAccessExceptionDeprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptional()instead.- Throws:
DataAccessException
-
fetchOptionalInto
@NotNull @Deprecated(forRemoval=true, since="3.10") <E> @NotNull Optional<E> fetchOptionalInto(Class<? extends E> type) throws DataAccessException, MappingException Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptionalInto(Class)instead.- Throws:
DataAccessExceptionMappingException
-
fetchOptional
@NotNull @Deprecated(forRemoval=true, since="3.10") <E> @NotNull Optional<E> fetchOptional(RecordMapper<? super R, E> mapper) throws DataAccessExceptionDeprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptional(RecordMapper)instead.- Throws:
DataAccessException
-
fetchOptionalInto
@NotNull @Deprecated(forRemoval=true, since="3.10") <Z extends Record> @NotNull Optional<Z> fetchOptionalInto(Table<Z> table) throws DataAccessException, MappingException Deprecated, for removal: This API element is subject to removal in a future version.- 3.10 - [#6363] - UsefetchNextOptionalInto(Table)instead.- Throws:
DataAccessExceptionMappingException
-
fetchNextOptional
Fetch the next record from the cursor.This will conveniently close the
Cursor, after the lastRecordwas fetched.The resulting record is attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Returns:
- The next record from the cursor
- Throws:
DataAccessException- if something went wrong executing the query
-
fetchNextOptionalInto
@NotNull <E> @NotNull Optional<E> fetchNextOptionalInto(Class<? extends E> type) throws DataAccessException, MappingException Map the next resulting record onto a custom type.This is the same as calling
fetchOne().into(type). SeeRecord.into(Class)for more details- Type Parameters:
E- The generic entity type.- Parameters:
type- The entity type.- Throws:
DataAccessException- if something went wrong executing the queryMappingException- wrapping any reflection or data type conversion exception that might have occurred while mapping records- See Also:
-
fetchNextOptional
@NotNull <E> @NotNull Optional<E> fetchNextOptional(RecordMapper<? super R, E> mapper) throws DataAccessExceptionFetch the next record into a custom mapper callback.This will conveniently close the
Cursor, after the lastRecordwas fetched.- Parameters:
mapper- The mapper callback- Returns:
- The custom mapped record
- Throws:
DataAccessException- if something went wrong executing the query
-
fetchNextOptionalInto
@NotNull <Z extends Record> @NotNull Optional<Z> fetchNextOptionalInto(Table<Z> table) throws DataAccessException, MappingException Map the next resulting record onto a custom record.This is the same as calling
fetchOne().into(table). SeeRecord.into(Class)for more detailsThe resulting record is attached to the original
Configurationby default. UseSettings.isAttachRecords()to override this behaviour.- Type Parameters:
Z- The generic table record type.- Parameters:
table- The table type.- Throws:
DataAccessException- if something went wrong executing the queryMappingException- wrapping any reflection or data type conversion exception that might have occurred while mapping records- See Also:
-
stream
Turn thisCursorinto aStream.- Throws:
DataAccessException- if something went wrong executing the query
-
collect
Reduce the execution results of this query using aCollector.This works in the same way as calling the following code:
cursor.stream().collect(collector);- Parameters:
collector- The collector that collects all records and accumulates them into a result type.- Returns:
- The result of the collection.
- Throws:
DataAccessException- if something went wrong executing the query
-
close
Explicitly close the underlyingPreparedStatementandResultSet.If you fetch all records from the underlying
ResultSet, jOOQCursorimplementations will close themselves for you. Callingclose()again will have no effect.- Specified by:
closein interfaceAutoCloseable- Throws:
DataAccessException- if something went wrong executing the query
-
isClosed
boolean isClosed()Check whether thisCursorhas been explicitly or "conveniently" closed.Explicit closing can be achieved by calling
close()from client code. "Convenient" closing is done by any of the other methods, when the last record was fetched. -
resultSet
Get theCursor's underlyingResultSet.This will return a
ResultSetwrapping the JDBC driver'sResultSet. Closing thisResultSetmay close the producingStatementorPreparedStatement, depending on your setting forResultQuery.keepStatement(boolean).Modifying this
ResultSetwill affect thisCursor.- Returns:
- The underlying
ResultSet. May benull, for instance when theCursoris closed.
-
fetchNext(int)instead.