Odchytavani ClassNotFoundException neni az takova silenost. Co kdyz JDBC
driver neni distribuovan jako soucast Vasi aplikace a v runtimu se nenajde?
Asi nebudete chtit v aplikaci chytat NoClassDefFoundError...

To, ze driver neni distribuovan s aplikaci je celkem bezne u aplikaci
deployovanych do ruznych j2ee kontejneru, kde je driver casto dostupny pres
nejaky sdileny classloader. Nerikam, ze to tak musi byt vzdy, ale je to
celkem rozumny pattern. Pokud delate nejakou standalone aplikaci, pak je to
samozrejme trochu jina situace.

V kazdym pripade mi neprijde optimalni natvrdo linkovat aplikaci s
konkretnim driverem jak navrhujete (import + new ...mysql.Driver()). Co kdyz
budete chtit driver vymenit za jiny? Bez prekompilovani a redeploy aplikace
se to pak neobejde. Podobne je to i se zadratovanim jmena tridy primo do
kodu aplikace. Pouzivejte konfig soubory...

Pokud tedy JDBC spojeni vytvarite rucne bez podpory nejakeho kontejneru,
Class.forName bych urcite nezavrhoval :)

Honza

> -----Původní zpráva-----
> Od: [email protected] 
> [mailto:[email protected]] za uživatele Robert Novotny
> Odesláno: 2. April 2009 00:25
> Komu: [email protected]
> Předmět: Inicializacia JDBC ovladaca
> 
> 
> Dobry den,
> zamyslel som sa nad ukazkovymi kodmi inicializacie JDBC 
> ovladaca a mam  
> mozno hlupu otazku.
> Takmer kazda prirucka / tutorial tvrdi, ze JDBC ovladac sa 
> inicializuje  
> nasledovne:
> 
>    try {
>      Class.forName("com.mysql.jdbc.Driver");
>    } catch (ClassNotFoundException e) {
>    e.printStackTrace();
>    }
> 
> a pripojenie sa ziska cez Connection = 
> DriverManager.getConnection(...),  
> ale to nie je dolezite.
> 
> Nie je predsa lepsie rovno vytvorit instanciu ovladaca a vyhnut sa  
> odchytavaniu
> nanajvys obskurnej ClassNotFoundException?
> 
>    import com.mysql.jdbc.Driver;
> 
>    Driver driver = new Driver();
>    Connection = DriverManager.getConnection(...)
> 
> Pripadne nezvyklejsie:
>    new Driver();
>    Connection = DriverManager.getConnection(...)
> 
> Dokumentacia tvrdi, ze Class.forName inicializuje ovladac
> a zaregistruje ho v DriverManageri (zvycajne v bloku statickej  
> inicializacie
> v implementacii Drivera). Ale podla JLS sa toto iste musi 
> stat pred vytvorenim prvej instancie konkretneho Drivera.
> 
> Chapem nieco zle? Alebo vsetci opisuju z prazdroja, ktory 
> ustanovil, ze driver sa inicializuje cez Class.forName? Alebo 
> sa vsetci boja vytvorenia instancie, ktora sa nepouziva? [Ci 
> vytvorenia instancie, ktora sa nevlozi do premennej?]
> 

Odpovedet emailem