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ě.
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