java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.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 17 08cd160ec1c6
permissions -rw-r--r--
Databázová vrstva: vykonávání příkazů a ukládání a načítání historie.
franta-hg@16
     1
package cz.frantovo.sql.vyuka.dao;
franta-hg@16
     2
franta-hg@16
     3
import cz.frantovo.sql.vyuka.dao.VyukaSuperDAO.DATABAZE;
franta-hg@16
     4
import cz.frantovo.sql.vyuka.dto.Hlaska;
franta-hg@16
     5
import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
franta-hg@16
     6
import cz.frantovo.sql.vyuka.dto.Tabulka;
franta-hg@16
     7
import cz.frantovo.sql.vyuka.dto.Uzivatel;
franta-hg@16
     8
import cz.frantovo.sql.vyuka.dto.VysledekSQL;
franta-hg@16
     9
import java.sql.Connection;
franta-hg@16
    10
import java.sql.PreparedStatement;
franta-hg@16
    11
import java.sql.ResultSet;
franta-hg@16
    12
import java.sql.SQLException;
franta-hg@16
    13
import java.util.logging.Level;
franta-hg@16
    14
franta-hg@16
    15
/**
franta-hg@16
    16
 * Pro spouštění uživatelových příkazů.
franta-hg@16
    17
 * @author fiki
franta-hg@16
    18
 */
franta-hg@16
    19
public class PiskovisteDAO extends VyukaSuperDAO {
franta-hg@16
    20
franta-hg@16
    21
    TipyDAO tipy = new TipyDAO();
franta-hg@16
    22
    HistorieDAO historie = new HistorieDAO();
franta-hg@16
    23
franta-hg@16
    24
    public VysledekSQL vykonejSQL(String sql, Uzivatel uzivatel) {
franta-hg@16
    25
        VysledekSQL v = new VysledekSQL();
franta-hg@16
    26
        if (historie.ulozPrikaz(sql, uzivatel)) {
franta-hg@16
    27
franta-hg@16
    28
franta-hg@16
    29
franta-hg@16
    30
franta-hg@16
    31
franta-hg@16
    32
franta-hg@16
    33
            Tabulka t = new Tabulka();
franta-hg@16
    34
franta-hg@16
    35
franta-hg@16
    36
franta-hg@16
    37
            Connection db = getSpojeni(DATABAZE.PISKOVISTE);
franta-hg@16
    38
            if (db == null) {
franta-hg@16
    39
                v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba));
franta-hg@16
    40
            } else {
franta-hg@16
    41
                PreparedStatement ps = null;
franta-hg@16
    42
                ResultSet rs = null;
franta-hg@16
    43
                try {
franta-hg@16
    44
                    ps = db.prepareStatement(sql);
franta-hg@16
    45
                    rs = ps.executeQuery();
franta-hg@16
    46
franta-hg@16
    47
                    int pocetSloupecku = rs.getMetaData().getColumnCount();
franta-hg@16
    48
                    String[] zahlavi = new String[pocetSloupecku];
franta-hg@16
    49
                    t.setZahlavi(zahlavi);
franta-hg@16
    50
                    for (int i = 0; i < pocetSloupecku; i++) {
franta-hg@16
    51
                        zahlavi[i] = rs.getMetaData().getColumnName(i + 1);
franta-hg@16
    52
                    }
franta-hg@16
    53
franta-hg@16
    54
                    while (rs.next()) {
franta-hg@16
    55
                        Object[] hodnoty = new Object[pocetSloupecku];
franta-hg@16
    56
                        for (int i = 0; i < pocetSloupecku; i++) {
franta-hg@16
    57
                            hodnoty[i] = rs.getObject(i + 1);
franta-hg@16
    58
                        }
franta-hg@16
    59
                        t.getHodnoty().add(hodnoty);
franta-hg@16
    60
                    }
franta-hg@16
    61
franta-hg@16
    62
                    if (t.getHodnoty().size() > 0 && pocetSloupecku > 0) {
franta-hg@16
    63
franta-hg@16
    64
                        v.getTabulky().add(t);
franta-hg@16
    65
                    } else {
franta-hg@16
    66
                        v.getHlasky().add(new Hlaska("SQL příkaz byl proveden.", Typ.OK));
franta-hg@16
    67
                    }
franta-hg@16
    68
franta-hg@16
    69
                } catch (SQLException e) {
franta-hg@16
    70
                    log.log(Level.SEVERE, "SQL chyba při vykonávání uživatelského dotazu.", e);
franta-hg@16
    71
                    v.getHlasky().add(new Hlaska("Chybné SQL: " + e.getMessage(), Typ.Chyba));
franta-hg@16
    72
                } catch (Exception e) {
franta-hg@16
    73
                    log.log(Level.SEVERE, "Chyba při vykonávání uživatelského dotazu.", e);
franta-hg@16
    74
                    v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba));
franta-hg@16
    75
                } finally {
franta-hg@16
    76
                    zavri(db, ps, rs);
franta-hg@16
    77
                }
franta-hg@16
    78
            }
franta-hg@16
    79
franta-hg@16
    80
            v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false));
franta-hg@16
    81
franta-hg@16
    82
franta-hg@16
    83
franta-hg@16
    84
franta-hg@16
    85
franta-hg@16
    86
        } else {
franta-hg@16
    87
            v.getHlasky().add(new Hlaska("Došlo k chybě historie.", Typ.Chyba));
franta-hg@16
    88
        }
franta-hg@16
    89
        return v;
franta-hg@16
    90
    }
franta-hg@16
    91
}