Ahoj,
odpovídám na zprávu z úterka, 21. února 2006,
kterou Michal Palička napsal(a) v 10:07:13:
Ty DB Utils dělají pomoci takovéhoto vnoření až to zavírání.
Já to hodlám dělat takto:
QueryRunner qr = new QueryRunner(DataConn.getDataSource());
List rv = (List)qr.query("SELECT name,value FROM data",new
ArrayListHandler());
A dostanu výsledek rovnou jako pole
nebo
QueryRunner qr = new QueryRunner(DataConn.getDataSource());
qr.batch(sql,data);
a importuju do Databáze x nových řádků
--------------------------- Původní zpráva ---------------------------
Odesilatel: Michal Palička <[EMAIL PROTECTED]>
Předmět: DataConnection pooling in Tomcat
Datum: 21. února 2006, 10:07:13 (GMT +0100)
Přílohy: <none>
msgid:[EMAIL PROTECTED]
M> Dobry den,
M> ten ukazkovy kod vypada teda dost brutalne.
M> Mne se osvedcilo pouziti vnorenych try-finally bloku.
M> Myslim, ze je to prehlednejsi a elegantnejsi.
M> Priklad:
M> void myMethod() throws SQLexception {
M> Connection con = ds.getConnection();
M> try {
M> Statement st = con.createStatement();
M> try {
M> ResultSet rs = st.executeQuery();
M> try {
M> ... // zpracovani dat z 'rs'
M> } finally {
M> rs.close();
M> }
M> } finally {
M> st.close();
M> }
M> } finally {
M> con.close();
M> }
M> }
M> Vyse uvedeny kod predpoklada, ze objekt (con, st, rs) je bud vytvoren
M> uspesne anebo je vyhozena vyjimka (tj. nenastane situace, ze napr. metoda
M> ds.getConnection() sice skonci bez vyjimky, avsak vrati <null>).
M> To by u JDBC melo platit.
M> Osetreni vyhozene vyjimky (SQLException) muzete resit bud v metode volajici
M> anebo cele telo metody myMethod obalit jeste jednim blokem (try-catch).
M> Pokud takovych metod budete mit vice, budou se v podstate lisit jenom kodem
M> v tom nejvnitrnejsim bloku. Opakujici se kod by se asi dal dale eliminovat.
M> ("template method" pattern, "command" pattern).
M> mp.
M> -----Original Message-----
M> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Tomáš
Procházka
M> Sent: Sunday, February 19, 2006 1:08 PM
M> To: [email protected]
M> Subject: DataConnection pooling in Tomcat
M> Zdravím.
M> Na stránce:
M> http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html
M> je ukázka doporučeného kódu pro práci s Connection v kontejneru Tomcatu a
musím říct,
M> že je to poměrně složitý postup (viz konec příspěvku).
M> Chtěl bych použít něco, co to zjednoduší, přemýšlel jsem o Jakrta Commons -
DBUtils, jenže je tam jedna věc, které se bojím.
M> V té doporučené ukázce zavírají Connection na konco výkonného bloku a pak
ještě ve finally bloku.
M> Jaký je rozdíl mezi:
M> try {
M> conn.close()
M> } finnaly {
M> conn.close()
M> }
M> a
M> try {
M>
M> } finnaly {
M> conn.close()
M> }
M> Tedy když se vynechá to uzavření ve výkonné části? Nebude pak docházet k
vyčerpání zdrojů?
M> DBUtills veškeré uzavírání provádí právě až ve finnaly bloku.
M> Nebo existuje nějaké lepší řešení než DBUtils? Mě se tohle líbí právě pro
svou
M> jednoduchost, nepotřebuji na to 10 MB knihoven.
M> Ukázka doporučeného použiti Connection v Tomcat kontejner:
M> Connection conn = null;
M> Statement stmt = null; // Or PreparedStatement if needed
M> ResultSet rs = null;
M> try {
M> conn = ... get connection from connection pool ...
M> stmt = conn.createStatement("select ...");
M> rs = stmt.executeQuery();
M> ... iterate through the result set ...
M> rs.close();
M> rs = null;
M> stmt.close();
M> stmt = null;
M> conn.close(); // Return to connection pool
M> conn = null; // Make sure we don't close it twice
M> } catch (SQLException e) {
M> ... deal with errors ...
M> } finally {
M> // Always make sure result sets and statements are closed,
M> // and the connection is returned to the pool
M> if (rs != null) {
M> try { rs.close(); } catch (SQLException e) { ; }
M> rs = null;
M> }
M> if (stmt != null) {
M> try { stmt.close(); } catch (SQLException e) { ; }
M> stmt = null;
M> }
M> if (conn != null) {
M> try { conn.close(); } catch (SQLException e) { ; }
M> conn = null;
M> }
M> }
M>
M>
M> Datum: 12:59:44 19. února 2006
M> --
M> ---------------------------------------------------------------------
M> Tomáš Procházka
M> E-mail: [EMAIL PROTECTED]
M> WWW: http://atom.sf.cz
M> ICQ: 87147320
M> ---------------------------------------------------------------------
------------------------ Konec původní zprávy ------------------------
--
---------------------------------------------------------------------
Tomáš Procházka
E-mail: [EMAIL PROTECTED]
WWW: http://atom.sf.cz
ICQ: 87147320
---------------------------------------------------------------------