web-dev-qa-db-fra.com

Comment écrire Count Query dans jOOQ

Je convertis Pure SQL en jOOQ maintenant je l'ai

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

Je dois écrire ceci dans jOOQ comment pouvons-nous l'écrire?

selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);
25
Subodh Joshi

La façon la plus simple d'implémenter ce que vous demandez est la suivante, en utilisant selectCount() :

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

Alternativement, vous pouvez exprimer explicitement la fonction count() :

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

Il existe une autre alternative pour récupérer un count(*) de toute expression arbitraire select, ce qui vous évite de spécifier l'index de la colonne de résultat et de taper ci-dessus fetchOne() méthode. Cela utilise fetchCount() :

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

Attention, cependant, cela rend une sélection imbriquée comme ceci:

SELECT COUNT(*) FROM (SELECT a, b, ... FROM Table)
67
Lukas Eder

Voici la solution que nous devons utiliser comme ceci

  selectQueryRecord.fetchCount();
1
Subodh Joshi

J'utilise la syntaxe suivante pour cela:

import org.jooq.impl.DSL.count

... 

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

C'est moins verbeux et plus simple.

La réponse de Lukas date de 2013, peut-être que cette solution n'existait pas à l'époque.

1
Kevin Davin

J'ai utilisé ceci:

Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);

0
Jesús Sánchez