# HG changeset patch # User František Kučera # Date 1247930201 -7200 # Node ID bc821c6d090c60b5fd60638b68779a9250abe338 # Parent 1eb68e2ac637a7561bc43eae3ce5145281dbf6d0 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ě. diff -r 1eb68e2ac637 -r bc821c6d090c java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java Tue Jul 14 18:08:07 2009 +0200 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java Sat Jul 18 17:16:41 2009 +0200 @@ -54,10 +54,22 @@ v.getTabulky().add(zpracujVysledek(rs)); } - /** 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). */ - while (ps.getMoreResults()) { + /** + * Ošetříme případ, kdy uživatel zadá SQL příkaz, který nevrací výsledkovou sadu. + * Typicky nastavení výchozího schématu: SET search_path = '…'; + * pokud bude pocetPokusu = 0 a první dotaz nevrátí výsledkovou sadu, + * procházení se ukončí a uživatel neuvidí žádnou tabulku (i když další příkazy už výsledkové sady vracely). + * Poznámka: jeden „SET search_path = '…'“ se obvykle předřazuje uživatelskému SQL (viz PiskovisteDAO.xml). + */ + int pocetPokusuBezRS = 1; + while (ps.getMoreResults() || pocetPokusuBezRS > 0) { + pocetPokusuBezRS--; rs = ps.getResultSet(); - v.getTabulky().add(zpracujVysledek(rs)); + if (rs == null) { + /** Jedná se buď o „update count“ nebo tu už žádná další výsledková sada není. */ + } else { + v.getTabulky().add(zpracujVysledek(rs)); + } } long dobaProvadeni = System.currentTimeMillis() - casPred;