Omet navegació

5.1 - Càrrega de controladors

Generalment, en una aplicació es pot tenir un número tan elevat de classes que la màquina virtual no pot tenir-les carregades totes en memòria. A mida que va sent necessari, la màquina virtual s’encarregarà de carregar en memòria les classes que es necessiten. Normalment, la màquina virtual descobreix la localització exacta de la ruta on es troba la classe a carregar analitzant les sentències import. En general és una forma molt útil i eficient de detectar la ubicació de les classes d’una aplicació.

El problema que tenim ara és que per poder utilitzar l'import necessitem conèixer a priori la classe que farem servir. A més, una vegada escrita la sentencia import, si algun dia necessitem reanomenar la classe o decidim utilitzar una classe equivalent d’un altre paquet, necessitarem reescriure el codi canviant la sentència import i recompilant-lo de nou per fer efectius els canvis.

Afortunadament, Java disposa d’una altra sentència per localitzar els fitxers compilats en el moment de la càrrega. Es el mètode Class.forName, que accepta com a paràmetre una cadena de text amb el nom complet de la classe a carregar (paquet i nom de classe). Qualsevol controlador JDBC disposa d’una classe especial anomenada generalment Driver, encarregada d’establir la connexió amb el nostre SGBD. En realitat el nom i el paquet de la classe depenen de cada fabricant i, per tant, caldrà consultar la documentació per conèixer el nom de la classe.  

En el cas de PostgreSQL, per indicar la classe a carregar, escriurem:

Class.forName("org.postgresql.Driver");

Per a MySQL:

Class.forName("com.mysql.jdbc.Driver")

I per a SQLite:

Class.forName("org.sqlite.JDBC");

 

Encara que no sempre és necessari posar aquesta sentència, ens anirà bé per assegurar-nos que accedim al driver. En cas de posar-la, cal escriure-la sempre abans de començar a utilitzar l’API JDBC.

El mètode forName de la classe Class pot llençar una excepció en cas que no es trobe la classe. En aquest exemple hem fet throws sobre l'error, però una altra possibilitat seria capturar l’error (amb try ... catch ) per saber si s’ha escrit el nom correctament o que ens hem oblidat d’afegir el controlador al projecte.

public class carregaControladors {

    public static void main(String[] args) throws ClassNotFoundException {
                Class.forName("org.postgresql.Driver");
                System.out.println("Ja s'ha carregat el controlador");
    }
}