java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/HistorieDAO.java
author František Kučera <franta-hg@frantovo.cz>
Fri May 29 03:44:35 2009 +0200 (2009-05-29)
changeset 16 9acb74ac7346
child 24 dceaaefb1946
permissions -rw-r--r--
Databázová vrstva: vykonávání příkazů a ukládání a načítání historie.
     1 package cz.frantovo.sql.vyuka.dao;
     2 
     3 import cz.frantovo.sql.vyuka.dto.Hlaska;
     4 import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
     5 import cz.frantovo.sql.vyuka.dto.Tabulka;
     6 import cz.frantovo.sql.vyuka.dto.Uzivatel;
     7 import cz.frantovo.sql.vyuka.dto.VysledekSQL;
     8 import java.sql.Connection;
     9 import java.sql.PreparedStatement;
    10 import java.sql.ResultSet;
    11 import java.sql.Timestamp;
    12 import java.util.logging.Level;
    13 
    14 /**
    15  * Ukládání a načítání uživatelské historie.
    16  * @author fiki
    17  */
    18 public class HistorieDAO extends VyukaSuperDAO {
    19 
    20     TipyDAO tipy = new TipyDAO();
    21 
    22     private enum SQL {
    23 
    24         NACTI,
    25         ULOZ
    26     }
    27 
    28     /**
    29      * @param sql uživatelský SQL příkaz k uložení
    30      * @param uzivatel idSezení a IP adresa uživatele
    31      * @return zda se podařilo historii uložit
    32      */
    33     public boolean ulozPrikaz(String sql, Uzivatel uzivatel) {
    34         Connection db = getSpojeni(DATABAZE.APLIKACE);
    35         if (db == null) {
    36             return false;
    37         } else {
    38             PreparedStatement ps = null;
    39             ResultSet rs = null;
    40             try {
    41                 ps = db.prepareStatement(getSQL(SQL.ULOZ));
    42                 ps.setString(1, sql);
    43                 ps.setString(2, uzivatel.getIdSezeni());
    44                 ps.setString(3, uzivatel.getIpAdresa());
    45                 ps.executeUpdate();
    46                 return true;
    47             } catch (Exception e) {
    48                 log.log(Level.SEVERE, "Chyba při ukládání historie.", e);
    49                 return false;
    50             } finally {
    51                 zavri(db, ps, rs);
    52             }
    53         }
    54     }
    55 
    56     public VysledekSQL nactiHistorii(Uzivatel uzivatel) {
    57         VysledekSQL v = new VysledekSQL();
    58 
    59 
    60         Tabulka t = new Tabulka();
    61         String[] zahlavi = {"Kdy", "SQL příkaz"};
    62         t.setZahlavi(zahlavi);
    63 
    64 
    65         Connection db = getSpojeni(DATABAZE.APLIKACE);
    66         if (db == null) {
    67             v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba));
    68         } else {
    69             PreparedStatement ps = null;
    70             ResultSet rs = null;
    71             try {
    72                 ps = db.prepareStatement(getSQL(SQL.NACTI));
    73                 ps.setString(1, uzivatel.getIdSezeni());
    74                 rs = ps.executeQuery();
    75 
    76                 while (rs.next()) {
    77                     Timestamp datum = rs.getTimestamp("datum");
    78                     String sql = rs.getString("sql");
    79                     Object[] hodnoty = {datum, sql};
    80                     t.getHodnoty().add(hodnoty);
    81                 }
    82 
    83                 if (t.getHodnoty().size() < 1) {
    84                     v.getHlasky().add(new Hlaska("Historie SQL příkazů nenalezena.", Typ.Varovani));
    85                 } else {
    86                     v.getTabulky().add(t);
    87                 }
    88 
    89             } catch (Exception e) {
    90                 log.log(Level.SEVERE, "Chyba při ukládání historie.", e);
    91                 v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba));
    92             } finally {
    93                 zavri(db, ps, rs);
    94             }
    95         }
    96 
    97         v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false));
    98         return v;
    99     }
   100 }