Retrieving the value of selectCount in jooq
java, jooq, sql
Solution
Unfortunately, for this particular query, there aren't many "better" ways to typesafely get the `count()` value. What you could do, to add type-safety, is this:
Field<Integer> f = count();
Integer count = jooq.
.select(f) // Or selectCount(). Replaced it to illustrate the case
.from(USERS)
.fetchOne(f);
The problem is that most of the type information about the projection has been "lost" to the Java compiler, by the time the `fetch()` methods are "reached". There is no way that a `ResultQuery.fetchXXX()` method could recover it from the `SELECT` clause, and produce it to you.
On the jOOQ user group, some users have argued to move the projection into the `fetch()` methods, entirely, the way C#'s LINQ, or Scala's SLICK do it. This would greatly complicate the expression of more advanced `SELECT` statements. An more elaborate explanation is documented here.
With jOOQ 3.0, additional record-level typesafety has been introduced. In jOOQ 3.3, it will thus be possible to fetch a single value as such (has been registered as #2246):
<T> T fetchValue(Select<Record1<T>> select);
Problem
I have some code that looks like this: ``` Record record = jooq .selectCount() .from(USERS) .fetchOne(); ``` Currently I'm doing the following to get the count: ``` Integer count = (Integer) record.getValue(0); ``` But it seems like there must be a better solution (that's type-safe...since that's the whole point of using jooq). Any suggestions?