Killian EBEL - Webmaster, Développeur Web, Webdesigner - XHTML / CSS / PHP

Java : Base de données

Blog > Tutoriaux Webmaster
Publié le 27/11/2007 à 22:02:55

Vous n'êtes pas sans savoir que la librairie JDBC, Java DataBase Connectivity, est la plus utilisée pour connecter Java à une base de données. Voici un petit article résumant ce qu'il faut savoir à ce propos.

JDBC est une API fourni avec Java depuis la version 1.1 : elle constitue simplement un ensemble de classes permettant de connecter une application Java à un SGBD. L'avantage ? Le développeur fait totalement abstraction du type de base, le code est portable et indépendant de la plateforme ! On peut notamment citer : DB2, FoxPro, Ingres, Interbase, MS Acces, MS SQL Server, MySQL, Oracle, Paradox, PostgreSQL, Sybase...

La connexion à la base se fait grâce à un driver facilement installable dans votre projet. On peut représenter l'architecture ainsi :

JDBC

Il existe ainsi quatre types de driver. Chaque driver une implémentation de l'interface Driver du package java.sql, et est pris en charge par la classe DriverManager. Les différents types sont :

Type 1 - Le pont JDBC-ODBC (JDBC-ODBC bridge plus ODBC driver) : Le driver de base dans J2SE (sun.jdbc.odbc.JdbcOdbcDriver). Il permet l'accès au SGBD via le driver ODBC.

Type 2 - Native-API partly-Java driver : Ce type de driver traduit les appels de JDBC à un SGBD particulier, grâce à un mélange d'API java et d'API natives.

Type 3 - JDBC-Net pure Java driver : Ce type de driver (écrit entièrement en java) passe par un serveur intermédiaire pour l'accès au SGBD.

Type 4 - Native-protocol pure Java driver : Ce type de driver (écrit entièrement en java) se connecte directement au SGBD.

Pour savoir quel type de driver utiliser, je vous renvoie vers la FAQ de developpez.com, qui est extrêmement bien faite.

Vous retrouverez souvent la même méthode pour établir la connexion avec le Driver : Class.forName("nomDuDriver");. Personnellement, je ne trouve pas cette syntaxe idéale, et préfère de loin celle-ci :

Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);

Ensuite, il y a point négatif, et beaucoup se sont précipités pour critiquer Java à cause de ce point. Bouh, Java c'est le mal, Java c'est pas vraiment portable, Java ci Java ça. En effet, ces personnes n'ont pas pris le temps de lire la document Java, ni les nombreux tutoriels associés.

Il existe un moyen plus propre depuis JDBC 3.0 que l'utilisation des DriverManager. Et ce miracle s'appelle la DataSource. Pour la deuxième méthode, je ne spécifie pas les exceptions à gérer, après c'est à vous de faire en sorte que, c'est simplement pour vous donner un exemple.

  • DriverManager

    • String driver = "nom.du.driver";
    • String url = "url";
    • String login = "log";
    • String password = "pass";
    • Connection connection = null;
    • try {
    • Class.forName(driver);
    • connection = DriverManager.getConnection(url, login, password);
    • // Vos traitements
    • } catch(ClassNotFoundException cnfe) {
    • System.out.println("Driver introuvable : ");
    • cnfe.printStackTrace();
    • } catch(SQLException sqle) {
    • while (sqle != null) {
    • System.out.println("Message: " + sqle.getMessage ());
    • System.out.println("SQLState: " + sqle.getSQLState ());
    • System.out.println("ErrorCode: " + sqle.getErrorCode ());
    • sqle = sqle.getNextException();
    • System.out.println("");
    • }
    • //cf Comment gérer les erreurs ?
    • } catch(Exception e) {
    • System.out.println("Autre erreur : ");
    • e.printStackTrace();
    • } finally {
    • if (connection!=null) {
    • try {
    • connection.close()
    • } catch(Exception e) {
    • e.printStackTrace();
    • }
    • }
    • }
  • DataSource (avec Derby)

    • InitialContext ic = new InitialContext()
    •  
    • DataSource ds = ic.lookup("java:comp/env/jdbc/myDB");
    • DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource();
    • ds.setPort(1527);
    • ds.setHost("localhost");
    • ds.setUser("APP");
    • ds.setPassword("APP");
    • Connection con = ds.getConnection();

Vous avez pu constater que la deuxième solution fait totalement abstraction du type de base de données ! Cette solution présente de nombreux avantages par rapport au DriverManager. Encore une fois, vous aurez beaucoup plus d'informations sur la FAQ de developpez.com, qui explique vraiment les avantages de cette solution.

Pour éviter un article trop long, je préfère séparer les différentes parties. Le prochain article traitera des requêtes de type SELECT vers une base de données à l'aide de JDBC. Bonne lecture !

PS : j'ai trouvé quelques liens fort intéressants à propos des DataSources. Premièrement, une description des DataSources, puis une page très complète avec plusieurs méthodes de connexion à une base de données (DataSources, ODBC...).

< Le web à portée de main Prototype et l'évènement DOMReady >

Commentaires

Il n'y a aucun commentaire pour cet article.

Ajouter mon commentaire :

Veuillez recopier ce code pour valider l'envoi :
Code secret