java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java
author František Kučera <franta-hg@frantovo.cz>
Fri May 29 04:09:58 2009 +0200 (2009-05-29)
changeset 17 08cd160ec1c6
parent 16 9acb74ac7346
child 18 e7a5763c789c
permissions -rw-r--r--
Podpora vícenásobných výsledkových sad (více dotazů oddělených středníkem). Omezení zobrazované historie na 20 posledních.
     1 package cz.frantovo.sql.vyuka.dao;
     2 
     3 import cz.frantovo.sql.vyuka.dao.VyukaSuperDAO.DATABAZE;
     4 import cz.frantovo.sql.vyuka.dto.Hlaska;
     5 import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
     6 import cz.frantovo.sql.vyuka.dto.Tabulka;
     7 import cz.frantovo.sql.vyuka.dto.Uzivatel;
     8 import cz.frantovo.sql.vyuka.dto.VysledekSQL;
     9 import java.sql.Connection;
    10 import java.sql.PreparedStatement;
    11 import java.sql.ResultSet;
    12 import java.sql.SQLException;
    13 import java.util.logging.Level;
    14 
    15 /**
    16  * Pro spouštění uživatelových příkazů.
    17  * @author fiki
    18  */
    19 public class PiskovisteDAO extends VyukaSuperDAO {
    20 
    21     TipyDAO tipy = new TipyDAO();
    22     HistorieDAO historie = new HistorieDAO();
    23 
    24     public VysledekSQL vykonejSQL(String sql, Uzivatel uzivatel) {
    25         VysledekSQL v = new VysledekSQL();
    26         if (historie.ulozPrikaz(sql, uzivatel)) {
    27 
    28             Connection db = getSpojeni(DATABAZE.PISKOVISTE);
    29             if (db == null) {
    30                 v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba));
    31             } else {
    32                 PreparedStatement ps = null;
    33                 ResultSet rs = null;
    34                 try {
    35                     ps = db.prepareStatement(sql);
    36                     boolean isRS = ps.execute();
    37 
    38                     if (isRS) {
    39                         rs = ps.getResultSet();
    40                         v.getTabulky().add(zpracujVysledek(rs));
    41 
    42                         while (ps.getMoreResults()) {
    43                             rs = ps.getResultSet();
    44                             v.getTabulky().add(zpracujVysledek(rs));
    45                         }
    46                     } else {
    47                         /** TODO: zobrazit počet aktualizovaných? */
    48                         v.getHlasky().add(new Hlaska("SQL příkaz byl proveden, ale nevrátil žádná data.", Typ.Varovani));
    49                     }
    50 
    51                 } catch (SQLException e) {
    52                     log.log(Level.SEVERE, "SQL chyba při vykonávání uživatelského dotazu.", e);
    53                     v.getHlasky().add(new Hlaska("Chybné SQL: " + e.getMessage(), Typ.Chyba));
    54                 } catch (Exception e) {
    55                     log.log(Level.SEVERE, "Chyba při vykonávání uživatelského dotazu.", e);
    56                     v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba));
    57                 } finally {
    58                     zavri(db, ps, rs);
    59                 }
    60             }
    61 
    62             v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false));
    63 
    64         } else {
    65             v.getHlasky().add(new Hlaska("Došlo k chybě historie.", Typ.Chyba));
    66         }
    67         return v;
    68     }
    69 
    70     private Tabulka zpracujVysledek(ResultSet rs) throws SQLException {
    71         Tabulka t = new Tabulka();
    72 
    73         int pocetSloupecku = rs.getMetaData().getColumnCount();
    74         String[] zahlavi = new String[pocetSloupecku];
    75         t.setZahlavi(zahlavi);
    76         for (int i = 0; i < pocetSloupecku; i++) {
    77             zahlavi[i] = rs.getMetaData().getColumnName(i + 1);
    78         }
    79 
    80         while (rs.next()) {
    81             Object[] hodnoty = new Object[pocetSloupecku];
    82             for (int i = 0; i < pocetSloupecku; i++) {
    83                 hodnoty[i] = rs.getObject(i + 1);
    84             }
    85             t.getHodnoty().add(hodnoty);
    86         }
    87 
    88         return t;
    89     }
    90 }