33 Stimmen

Wie man die Count-Abfrage in jOOQ schreibt

Ich konvertiere gerade Pure SQL zu jOOQ, jetzt habe ich das

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

Ich muss das in jOOQ schreiben, wie können wir das schreiben?

selectQueryRecord.addSelect(Hier Count Funktion);
selectQueryRecord.addFrom(Table);

91voto

Lukas Eder Punkte 194234

Der einfachste Weg, um das umzusetzen, was du angefordert hast, ist dies, indem du selectCount() verwendest:

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

Alternativ kannst du die count() Funktion explizit ausdrücken:

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

Oder du kannst dies verwenden, wenn du das Zuordnen des Werts nicht magst:

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

Es gibt eine weitere Alternative, um ein count(*) von einem beliebigen select-Ausdruck abzurufen, die es dir ermöglicht, den Ergebnisspaltenindex und -typ in der obigen fetchOne()-Methode zu vermeiden. Dies verwendet fetchCount():

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

Aber sei vorsichtig, dass dies ein verschachteltes Select wie folgt ergibt:

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

5voto

Kevin Davin Punkte 511

Ich verwende die folgende Syntax dafür:

import org.jooq.impl.DSL.count

... 

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

Dies ist weniger umständlich und einfacher.

Lukas Antwort stammt aus dem Jahr 2013, vielleicht gab es diese Lösung zu der Zeit nicht.

0voto

Subodh Joshi Punkte 11939

Hier ist die Lösung. Wir müssen es so verwenden

  selectQueryRecord.fetchCount();

0voto

Jesús Sánchez Punkte 575

Ich habe dies verwendet:

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

-2voto

psisodia Punkte 1087

HINWEIS:

Veraltet. - 3.5.0 - [#3356] - Diese Methode wird entfernt, da sie verwirrend von allen anderen Arten der ResultQuery.fetch() Methoden abweicht, indem sie die ursprüngliche Select-Anweisung modifiziert, indem sie sie umschließt. Insbesondere kann diese Methode leicht mit ResultQuery.fetch(Field) verwechselt werden, oder genauer gesagt mit fetch(count()), was eine völlig andere Semantik hat. Verwenden Sie stattdessen DSLContext.fetchCount(Select). Führen Sie diese Abfrage im Kontext ihres angehängten Executors aus und geben Sie einen COUNT(*)-Wert zurück.

Ich denke, die richtige Art, den Wert zu erhalten, wäre wie folgt:

 SelectQuery selectQueryCount = transaction.selectQuery();
 selectQueryCount.addFrom(Tabelle);

 Result resultObject = selectQueryRecord.fetchCount();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X