Přidáno SuperDAO.
1 package cz.frantovo.superDAO;
3 import java.io.InputStream;
4 import java.sql.Connection;
5 import java.sql.ResultSet;
6 import java.sql.Statement;
7 import java.util.Collections;
8 import java.util.HashMap;
10 import java.util.Properties;
11 import java.util.logging.Level;
12 import java.util.logging.Logger;
18 public class SuperDAO {
20 protected Logger log = Logger.getLogger(getClass().getName());
21 private static Map<Class, Properties> sql = Collections.synchronizedMap(new HashMap<Class, Properties>());
22 private static Map<Class, Properties> vlastnosti = Collections.synchronizedMap(new HashMap<Class, Properties>());
24 private enum VLASTNOSTI {
30 * Načítá SQL dotazy ze souboru, který se jmenuje stejně jako třída a má příponu sql.xml
31 * Do těchto souborů patří pouze SQL dotazy - všechny ostatní parametry dáme do .xml souboru.
32 * <p><strong>Pozor</strong> na použití v <em>protected</em> metodách, které mohou být volány z potomků –
33 * pak se použije XML soubor daného potomka a ne XML soubor třídy, ve které se <em>protected</em> metoda nachází.
34 * V takovém případě je potřeba použít parametr <em>trida</em></p>
35 * @param klic Enum konstnanta z dané třídy
36 * @param trida třída, jejíž XML soubor budeme hledat.
37 * @return SQL dotaz nebo null v případě chyby
39 protected String getSQL(Enum klic, Class trida) {
40 return getHodnota(sql, "sql.xml", klic, trida);
44 * @see getSQL(Enum klic, Class trida)
46 protected String getSQL(Enum klic) {
47 return getSQL(klic, null);
51 * Načítá textové hodnoty (vlastnosti) ze souboru, který se jmenuje stejně jako třída a má příponu xml
52 * Sem patří všechny parametry tříd kromě SQL dotazů.
53 * <p><strong>Pozor</strong> na použití v <code>protected</code> metodách, které mohou být volány z potomků –
54 * pak se použije XML soubor daného potomka a ne XML soubor třídy, ve které se <code>protected</code> metoda nachází.
55 * V takovém případě je potřeba použít parametr <code>trida</code></p>
56 * @param klic Enum konstnanta z dané třídy
57 * @param trida třída, jejíž XML soubor budeme hledat.
58 * @return textová hodnota nebo null v případě chyby
60 protected String getVlastnost(Enum klic, Class trida) {
61 return getHodnota(vlastnosti, "xml", klic, trida);
65 * @see getVlastnost(Enum klic, Class trida)
67 protected String getVlastnost(Enum klic) {
68 return getVlastnost(klic, null);
72 * Nečte hodnoty přímo ze souboru, ale snaží se je nejprve najít ve statické mezipaměti.
73 * @param klic Enum konstnanta z dané třídy
74 * @return textová hodnota nebo null v případě chyby
76 private String getHodnota(Map<Class, Properties> mezipamet, String pripona, Enum klic, Class trida) {
82 if (mezipamet.get(trida) == null) {
83 /** Ještě nemáme načteno ze souboru */
84 mezipamet.put(trida, getHodnoty(pripona, trida));
86 if (mezipamet.get(trida) == null) {
87 /** Došlo k chybě --> už to příště nebudeme zkoušet načítat */
88 mezipamet.put(trida, new Properties());
92 return mezipamet.get(trida).getProperty(klic.toString());
96 * Jen pro vyzkoušení, jak načítání XML funguje.
99 public static void main(String[] args) {
100 System.out.println(new SuperDAO().getSQL(VLASTNOSTI.AHOJ));
104 * Načte vlastnosti dané třídy z XML souboru.
105 * Soubory se dávají do stejného balíčku jako třída, akorát mají jinou příponu.
106 * @param pripona přípona souboru - obvykle "sql.xml" nebo "xml" (bez tečky)
107 * @return načtené vlastnosti nebo null v případě chyby
109 private Properties getHodnoty(String pripona, Class trida) {
110 String soubor = trida.getSimpleName() + "." + pripona;
113 Properties hodnoty = new Properties();
114 InputStream fis = trida.getResourceAsStream(soubor);
115 hodnoty.loadFromXML(fis);
117 } catch (Exception e) {
118 log.log(Level.SEVERE, "Chyba při načítání vlastností: " + soubor, e);
125 * @param spojeni DB spojení
126 * @param prikaz DB dotaz
127 * @param vysledek DB výsledek
129 protected static void zavri(Connection spojeni, Statement prikaz, ResultSet vysledek) {
130 if (vysledek != null) {
133 } catch (Exception e) {
136 if (prikaz != null) {
139 } catch (Exception e) {
142 if (spojeni != null) {
145 } catch (Exception e) {
151 * Vhodné pokud v XML používáme <![CDATA[ … ]]>.
153 * @param text původní řetězec načtený z XML souboru.
154 * @return Text s oříznutými bílými znany nazačátku a nakonci.
156 public static String orizni(String text) {