root/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java @ 17:08cd160ec1c6

Revision 17:08cd160ec1c6, 3.2 KB (checked in by František Kučera <franta-hg@…>, 15 years ago)

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.

Line 
1package cz.frantovo.sql.vyuka.dao;
2
3import cz.frantovo.sql.vyuka.dao.VyukaSuperDAO.DATABAZE;
4import cz.frantovo.sql.vyuka.dto.Hlaska;
5import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
6import cz.frantovo.sql.vyuka.dto.Tabulka;
7import cz.frantovo.sql.vyuka.dto.Uzivatel;
8import cz.frantovo.sql.vyuka.dto.VysledekSQL;
9import java.sql.Connection;
10import java.sql.PreparedStatement;
11import java.sql.ResultSet;
12import java.sql.SQLException;
13import java.util.logging.Level;
14
15/**
16 * Pro spouštění uživatelových příkazů.
17 * @author fiki
18 */
19public 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}
Note: See TracBrowser for help on using the browser.