Elexis API documentation
Version 2.1.6 as of December 11 2011

ch.elexis.data
Class Query<T>

java.lang.Object
  extended by ch.elexis.data.Query<T>

public class Query<T>
extends java.lang.Object

Query manages all database queries of PersistentObjects and derived classes Die Query-Klasse erledigt alle Datenbankabfragen auf PersistentObjects und davon abgeleitete Klassen.

Author:
Gerry

Field Summary
static java.lang.String EQUALS
           
static java.lang.String GREATER
           
static java.lang.String GREATER_OR_EQUAL
           
static java.lang.String LESS
           
static java.lang.String LESS_OR_EQUAL
           
static java.lang.String LIKE
           
static java.lang.String NOT_EQUAL
           
 
Constructor Summary
Query(java.lang.Class<? extends PersistentObject> cl)
          Konstruktor
Query(java.lang.Class<? extends PersistentObject> cl, java.lang.String string)
          This method allows to set a custom sql query string; E.g.
Query(java.lang.Class<? extends PersistentObject> cl, java.lang.String field, java.lang.String value)
          Bequemlichkeits-Konstruktor, der gleich eine Bedingung einträgt
 
Method Summary
 boolean add(java.lang.String feld, java.lang.String operator, java.lang.String wert)
           
 boolean add(java.lang.String feld, java.lang.String operator, java.lang.String wert, boolean toLower)
          Bedingung zufügen.
 void addPostQueryFilter(IFilter f)
          PostQueryFilters sind Filter-Objeckte, die nach der Datenbankanfrage auf das zurückgelieferte Resultat angewendet werden.
 void addToken(java.lang.String token)
          Unverändertes Token in den SQL-String einfügen
 void and()
          AND-Verknüpfung anfügen.
 void clear()
          Abfrage löschen, beispielsweise um dasselbe Query-Objekt für eine neue Abfrage zu verwenden.
 void endGroup()
          Gruppierung ende
 java.util.List<T> execute()
          Die zusammengestellte Abfrage ausführen Dies kann aufgerufen werden, nachdem alle nötigen add(), AND(), or() und orderBy() Operationen eingegeben wurden und liefert das Ergebnis dieser Abfrage. execute() kann mit derselben Abfrage beliebig oft aufgerufen werden (und kann unzterschiedliche Resultate liefern, wenn von anderer Stelle zwischenzeitlich eine Änderung der Datenbank erfolgte)
 java.util.Collection<T> execute(java.util.Collection<T> collection)
           
 java.util.ArrayList<java.lang.String> execute(java.sql.PreparedStatement ps, java.lang.String[] values)
           
 java.util.List<T> executeWithDeleted()
          execute query and include elements that are marked deleted
 java.lang.String findSingle(java.lang.String f, java.lang.String op, java.lang.String v)
          Bequemlichkeitsmethode für eine Abfrage, die nur einen einzigen Treffer liefern soll.
 java.lang.String getActualQuery()
           
 java.lang.String getLastQuery()
           
 java.sql.PreparedStatement getPreparedStatement(java.sql.PreparedStatement previous)
           
 void insertFalse()
          Bedingung einsetzen, die nie erfüllt ist
 void insertTrue()
          Bedingung einsetzen, die immer erfüllt ist
 void or()
          OR-Verknüpfung anfügen
 void orderBy(boolean reverse, java.lang.String... n1)
          Sortierung angeben.
 java.util.Collection<T> queryExpression(java.lang.String expr, java.util.Collection<T> ret)
          Eine komplexe selbst zusammengestellte Abfrage ausführen.
 java.util.List<T> queryFields(java.lang.String[] fields, java.lang.String[] values, boolean exact)
          Bequemlichkeitsmethode, um gleich mehrere Felder auf einmal anzugeben, welche mit AND verknüpft werden.
 void removePostQueryFilter(IFilter f)
           
 int size()
          Die Grösse des zu erwartenden Resultats abfragen.
 void startGroup()
          Folgende Ausdrücke bis endGroup gruppieren
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EQUALS

public static final java.lang.String EQUALS
See Also:
Constant Field Values

GREATER

public static final java.lang.String GREATER
See Also:
Constant Field Values

LESS

public static final java.lang.String LESS
See Also:
Constant Field Values

LESS_OR_EQUAL

public static final java.lang.String LESS_OR_EQUAL
See Also:
Constant Field Values

GREATER_OR_EQUAL

public static final java.lang.String GREATER_OR_EQUAL
See Also:
Constant Field Values

NOT_EQUAL

public static final java.lang.String NOT_EQUAL
See Also:
Constant Field Values

LIKE

public static final java.lang.String LIKE
See Also:
Constant Field Values
Constructor Detail

Query

public Query(java.lang.Class<? extends PersistentObject> cl)
Konstruktor

Parameters:
cl - Die Klasse, auf die die Abfrage angewendet werden soll (z.B. Patient.class)

Query

public Query(java.lang.Class<? extends PersistentObject> cl,
             java.lang.String field,
             java.lang.String value)
Bequemlichkeits-Konstruktor, der gleich eine Bedingung einträgt

Parameters:
cl - Klasse, auf die Abfrage angewendet wird
field - Feldname
value - Gesuchter Wert von Feldname

Query

public Query(java.lang.Class<? extends PersistentObject> cl,
             java.lang.String string)
This method allows to set a custom sql query string; E.g. The original Query does not support the usage of INNER JOINS, to use them nevertheless we need to provide a direct method to set query strings

Parameters:
cl - the persistent object to set the query for
string - the SQL query string
Method Detail

clear

public void clear()
Abfrage löschen, beispielsweise um dasselbe Query-Objekt für eine neue Abfrage zu verwenden.


startGroup

public void startGroup()
Folgende Ausdrücke bis endGroup gruppieren


endGroup

public void endGroup()
Gruppierung ende


insertTrue

public void insertTrue()
Bedingung einsetzen, die immer erfüllt ist


insertFalse

public void insertFalse()
Bedingung einsetzen, die nie erfüllt ist


and

public void and()
AND-Verknüpfung anfügen.


or

public void or()
OR-Verknüpfung anfügen


add

public boolean add(java.lang.String feld,
                   java.lang.String operator,
                   java.lang.String wert,
                   boolean toLower)
Bedingung zufügen. Mehrere Bedingungen können hinzugefügt werden, indem jeweils zwischen zwei add() Aufrufen and() oder or() aufgerufen wird. Die Abfrage wird noch nicht ausgeführt, sondern erst beim abschliessenden execute()

Parameters:
feld - Das Feld, für das die Bedingung gilt
operator - Vergleich (z.B. "=", "LIKE", ">", "<")
wert - Der Wert, der gesucht wird. Für Wildcard suche kann der Wert % enthalten, der Operator muss dann aber "LIKE" sein
toLower - bei true werden die Parameter mit der SQL-Funktion "lower()" in + * Kleinschreibung umgewandelt, so dass die Gross-/Kleinschreibung egal ist.
Returns:
false bei Fehler in der Syntax oder nichtexistenten Feldern

add

public boolean add(java.lang.String feld,
                   java.lang.String operator,
                   java.lang.String wert)

addToken

public void addToken(java.lang.String token)
Unverändertes Token in den SQL-String einfügen


findSingle

public java.lang.String findSingle(java.lang.String f,
                                   java.lang.String op,
                                   java.lang.String v)
Bequemlichkeitsmethode für eine Abfrage, die nur einen einzigen Treffer liefern soll. Die Syntax ist wie bei der add() Methode, aber die Abfrage wird gleich ausgeführt

Parameters:
f - Feld
op - Vergleichsoperator (s. auch unter add())
v - Wert (@see Query#add() )
Returns:
Die ID des gefundenen Objekts oder null, wenn nicht gefunden

queryFields

public java.util.List<T> queryFields(java.lang.String[] fields,
                                     java.lang.String[] values,
                                     boolean exact)
Bequemlichkeitsmethode, um gleich mehrere Felder auf einmal anzugeben, welche mit AND verknüpft werden. Dies ist dasselbe, wie mehrere Aufrufe nacheinander von add() und and(), aber die Abfrage wird gleich ausgeführt und die Resultate werden nach den übergebenen Feldern sortiert, in der Reihenfolge, in der sie übergeben wurden.

Parameters:
fields - Die Felder, die in die abfrage eingesetzt werden sollen
values - die Werte, nach denen gesucht werden soll. Wenn values für ein Feld leer ist (null oder ""), dann wird dieses Feld aus der Abfrage weggelassen
exact - false, wenn die Abfrage mit LIKE erfolgen soll, sonst mit =
Returns:
eine Liste mit den gefundenen Objekten

getPreparedStatement

public java.sql.PreparedStatement getPreparedStatement(java.sql.PreparedStatement previous)

execute

public java.util.ArrayList<java.lang.String> execute(java.sql.PreparedStatement ps,
                                                     java.lang.String[] values)

orderBy

public void orderBy(boolean reverse,
                    java.lang.String... n1)
Sortierung angeben. Dies muss als letzter Befehl nach einer Reihe von add() Sequenzen erfolgen.

Parameters:
reverse - true bei umgekehrter Sortierung
n1 - Beliebig viele Strings, die in absteigender Priorität die Felder angeben, nach denen sortiert werden soll.

executeWithDeleted

public java.util.List<T> executeWithDeleted()
execute query and include elements that are marked deleted

Returns:

execute

public java.util.List<T> execute()
Die zusammengestellte Abfrage ausführen Dies kann aufgerufen werden, nachdem alle nötigen add(), AND(), or() und orderBy() Operationen eingegeben wurden und liefert das Ergebnis dieser Abfrage. execute() kann mit derselben Abfrage beliebig oft aufgerufen werden (und kann unzterschiedliche Resultate liefern, wenn von anderer Stelle zwischenzeitlich eine Änderung der Datenbank erfolgte)

Returns:
eine Liste aus Objekten, die das Resultat der Abfrage sind.

execute

public java.util.Collection<T> execute(java.util.Collection<T> collection)

queryExpression

public java.util.Collection<T> queryExpression(java.lang.String expr,
                                               java.util.Collection<T> ret)
Eine komplexe selbst zusammengestellte Abfrage ausführen. Die Methoden von Query erlauben eine einfache Zusammenstellung einer SQL-Abfrage, Für spezielle Fälle will man aber vielleicht die SQL-Abfrage doch selber direkt angeben. Dies kann hier erfolgen.

Parameters:
expr - ein für die verwendete Datenbank akzeptabler SQL-String. Es soll nach Möglichkeit nur Standard-SQL verwendet werden, um sich nicht von einer bestimmten Datenbank abhängig zu machen. Die Abfrage muss nur nach dem Feld ID fragen; das Objekt wird von query selbst hergestellt.
Returns:
Eine Liste der Objekte, die als Antwort auf die Anfrage geliefert wurden.

size

public int size()
Die Grösse des zu erwartenden Resultats abfragen. Dieses Resultat stimmt nur ungefähr, da es bis zur tatsächlichen Abfrage noch Änderungen geben kann, und da allfällige postQueryFilter das Resultat verkleinern könnten.

Returns:
die ungefähre Zahl der erwarteten Objekte.

getLastQuery

public java.lang.String getLastQuery()

getActualQuery

public java.lang.String getActualQuery()

addPostQueryFilter

public void addPostQueryFilter(IFilter f)
PostQueryFilters sind Filter-Objeckte, die nach der Datenbankanfrage auf das zurückgelieferte Resultat angewendet werden. Diese sind weniger effizient, als Filter, die bereits im Query-String enthalten sind, aber sie erlauben Datenbankunabhängig feinere Filterungen. Sie sind auch die einzige Möglichkeit, auf komprimierte oder codierte Felder zu filtern.

Parameters:
f - ein Filter

removePostQueryFilter

public void removePostQueryFilter(IFilter f)

Elexis API documentation
Version 2.1.6 as of December 11 2011

Copyright 2005-2011 by Gerry Weirich, Elexis