Agregační funkce v Gali_db

minulém díle byly popsány základní metody První ze 4 tříd v Gali_db. V tomto tutoriálu si ukážeme agregační funkce ve třídě FunctionDatabase. Tuto třídu stejně jako třídu Database získáme ze třídy DBContainer. Ve třídě jsou obsaženy pouze základní funkce, nebude tedy těžké se tyto funkce naučit. Nakonec chci jen upozornit, že třída FunctionDatabase dědí ze třídy Database, obahuje tedy kromě agragačních funkcí všechny základní funkce jako jsou (insert, update, delete a select). 

 

1.krok - vytvoření třídy FunctionDatabase

DBContainer container = new DBContainer();
FunctionDatabase database = (FunctionDatabase) container.selectDatabase("function").createDatabase("osoby", "root", ""); 
//ověření
System.out.println(database.getClass().getName());

První dva řádky jsou velmi podobné, jako při vytváření klasické třídy Database. Jediný rozdíl je, že v metodě selectDatabase, uvedeme jako parametr "function" a hodnotu kterou nám Container vrátí musíme přetypovat na třídu FunctionDatabase. Na posledním řádku je pak oveření, že se v proměné database nachází instance třídy FunctionDatabase

 

 

Co to jsou agregační funkce?

Jsou to statické funkce, které slouží k seskupovaní údajů z databázové tabulky. Třída FunctionDatabase obsahuje následující metody:

  1. sum() - součet
  2. avg() - aritmetický průměr
  3. count() - počet
  4. min() - minimum
  5. max() - maximum

Všechny funkce mají následující poředí parametrů - (String table, Object[] columns, String requirement, Object[] params).

Pro lepší vysvětlení si ukážeme 2 příklady a ukážeme si jak tyto úlohy řešit, za pomoci našeho Wrapperu. Vše musí být opět v bloku try!

1.příklad - počet osob programujících v jazyce Java

Object[] params3 = {"Java"};
int count = functionDatabase.count("osoby", null, "jazyk = ?", params3);

//výpis
System.out.println(count);

Pokud uvedeme jako druhý parametr hodnotu null, dosadí se do SQL dotazu *. Tento znak značí všechny sloupce v databázové tabulce. Je jasné, že můžeme být konkrétnější a místo hodnoty null můžeme uvést pouze určité sloupce, na kterýhc se má funkce provést.

 

2.příklad - výpis minimálního, maximálního, průměrného věku osob + součet let.

Protentokrát ukážu celý kód:

try {
       DBContainer container = new DBContainer();
      FunctionDatabase database = (FunctionDatabase) container.selectDatabase("function").createDatabase("osoby", "root", "");

String[] column = {"vek"};
Object[] params2 = {"Java"};
int min = database.min("osoby", column, "jazyk = ?", params2);
int max = database.max("osoby", column, "jazyk = ?", params2);
int avg = database.avg("osoby", column, "jazyk = ?", params2);
int sum = database.sum("osoby", column, "jazyk = ?", params2);
System.out.println("Minimální věk - "+min);
System.out.println("Průměrný věk - "+avg);
System.out.println("Maximální věk - "+max);
System.out.println("Součet všech let - "+sum);

}catch (SQLException ex) {
       System.out.println("chyba - "+ex.getMessage());
}