Oprava #3 – uživatel může zadat příkaz, který nevrací výsledkovou sadu (typicky nastavení „search_path“), dříve se nezobrazovaly následné výsledky (tabulky) a proces procházení skončil.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat Jul 18 17:16:41 2009 +0200 (2009-07-18)
changeset 51bc821c6d090c
parent 50 1eb68e2ac637
child 52 0eeae8c247cc
Oprava #3 – uživatel může zadat příkaz, který nevrací výsledkovou sadu (typicky nastavení „search_path“), dříve se nezobrazovaly následné výsledky (tabulky) a proces procházení skončil.
Teď může uživatel zadar jeden příkaz, který nevrací výsledek a výsledky (tabulky) následujících dotazů se mu zobrazí správně.
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java
     1.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java	Tue Jul 14 18:08:07 2009 +0200
     1.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java	Sat Jul 18 17:16:41 2009 +0200
     1.3 @@ -54,10 +54,22 @@
     1.4                          v.getTabulky().add(zpracujVysledek(rs));
     1.5                      }
     1.6  
     1.7 -                    /** TODO: ošetřit případ, kdy vykonáme dva příkazy bez výsledkové sady a třetí příkaz ji už má (teď se nezobrazí výsledná tabulka). */
     1.8 -                    while (ps.getMoreResults()) {
     1.9 +                    /**
    1.10 +                     * Ošetříme případ, kdy uživatel zadá SQL příkaz, který nevrací výsledkovou sadu.
    1.11 +                     * Typicky nastavení výchozího schématu: SET search_path = '…';
    1.12 +                     * pokud bude pocetPokusu = 0 a první dotaz nevrátí výsledkovou sadu,
    1.13 +                     * procházení se ukončí a uživatel neuvidí žádnou tabulku (i když další příkazy už výsledkové sady vracely).
    1.14 +                     * Poznámka: jeden „SET search_path = '…'“ se obvykle předřazuje uživatelskému SQL (viz PiskovisteDAO.xml).
    1.15 +                     */
    1.16 +                    int pocetPokusuBezRS = 1;
    1.17 +                    while (ps.getMoreResults() || pocetPokusuBezRS > 0) {
    1.18 +                        pocetPokusuBezRS--;
    1.19                          rs = ps.getResultSet();
    1.20 -                        v.getTabulky().add(zpracujVysledek(rs));
    1.21 +                        if (rs == null) {
    1.22 +                            /** Jedná se buď o „update count“ nebo tu už žádná další výsledková sada není. */
    1.23 +                        } else {
    1.24 +                            v.getTabulky().add(zpracujVysledek(rs));
    1.25 +                        }
    1.26                      }
    1.27                      long dobaProvadeni = System.currentTimeMillis() - casPred;
    1.28