Search code examples
javasqljooq

How to write Count Query In jOOQ


I am converting Pure SQL to jOOQ now I have this

("SELECT Count(*) Count From Table "); 

I have to write this in jOOQ how can we write it?

selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);

Solution

  • The most straight-forward way to implement what you're requesting is this, by using selectCount():

    int count = 
    DSL.using(configuration)
       .selectCount()
       .from(Table)
       .fetchOne(0, int.class);
    

    Alternatively, you can explicitly express the count() function:

    int count = 
    DSL.using(configuration)
       .select(DSL.count())
       .from(Table)
       .fetchOne(0, int.class);
    

    Or, you can use this, if you don't like mapping the value:

    int count =
    DSL.using(configuration)
       .fetchValue(selectCount().from(Table));
    

    There's another alternative for fetching a count(*) of any arbitrary select expression, which helps you avoid specifying the result column index and type in the above fetchOne() method. This uses fetchCount():

    int count =
    DSL.using(configuration)
       .fetchCount(DSL.selectFrom(Table));
    

    Beware, though, that this renders a nested select like this:

    SELECT COUNT(*) FROM (SELECT a, b, ... FROM Table)