Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11
JDBC flags
Supported by ✅ Open Source Edition ✅ Express Edition ✅ Professional Edition ✅ Enterprise Edition
JDBC knows a couple of execution flags and modes, which can be set through the jOOQ API as well. jOOQ essentially supports these flags and execution modes:
public interface Query extends QueryPart, Attachable {
// [...]
// The query execution timeout.
// -----------------------------------------------------------
Query queryTimeout(int timeout);
}
public interface ResultQuery<R extends Record> extends Query {
// [...]
// The query execution timeout.
// -----------------------------------------------------------
@Override
ResultQuery<R> queryTimeout(int timeout);
// Flags allowing to specify the resulting ResultSet modes
// -----------------------------------------------------------
ResultQuery<R> resultSetConcurrency(int resultSetConcurrency);
ResultQuery<R> resultSetType(int resultSetType);
ResultQuery<R> resultSetHoldability(int resultSetHoldability);
// The buffer size for JDBC cursors
// -----------------------------------------------------------
ResultQuery<R> fetchSize(int size);
// The maximum number of rows to be fetched by JDBC
// -----------------------------------------------------------
ResultQuery<R> maxRows(int rows);
}
Using ResultSet concurrency with ExecuteListeners
An example of why you might want to manually set a ResultSet's concurrency flag to something non-default is given here:
DSL.using(new DefaultConfiguration()
.set(connection)
.set(SQLDialect.ORACLE)
.set(ExecuteListener.onRecordStart(ctx -> {
try {
// Change values in the cursor before reading a record
ctx.resultSet().updateString(BOOK.TITLE.getName(), "New Title");
ctx.resultSet().updateRow();
}
catch (SQLException e) {
throw new DataAccessException("Exception", e);
}
)))
.select(BOOK.ID, BOOK.TITLE)
.from(BOOK)
.orderBy(BOOK.ID)
.resultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE)
.resultSetConcurrency(ResultSet.CONCUR_UPDATABLE)
.fetch(BOOK.TITLE);
In the above example, your custom ExecuteListener callback is triggered before jOOQ loads a new Record from the java.sql.ResultSet. With the concurrency being set to ResultSet.CONCUR_UPDATABLE, you can now modify the database cursor through the standard java.sql.ResultSet API.
Feedback
Do you have any feedback about this page? We'd love to hear it!