APSQL

Accéder à une base SQL Express depuis un programme Java

Le langage Java est populaire est relativement plaisant à utiliser(c'est une question de gout!). Comme dans n'importe quel type de programmation, il se pose toujours le problème du stockage des données. Il existe bien sur des produits open Source mais qu'en est il de l'intégration de tels produits dans un contexte d'entreprise?

Pour travailler de façon efficace avec les données et bénéficier de la puissance et la robustesse d'un SGBDR d'entreprise, il est possible d'utiliser SQL Server Express.

Un moteur de base de données Microsoft avec Java, oui c'est tout à fait possible et cela fonctionne même très bien.

Le programme d'exemple présenté ci dessous permet d'afficher le contenue d'une table présente sur une instance SQL Server Express par un programme Java SE.

La mise en place

Après avoir installé le JDK et l'environnement de développement habituel (Eclipse dans le cas présent), une instance de SQL Server Express doit également être mise en place. Dans le cas présent la base de données Test à était définie sur l'instance SQL Server Express et une table Individus y a était créée.

Le mode d'authentification Windows doit être activé sur l'instance SQLExpress. En effet, pour l'instant, le mode d'authentification windows n'est pas supportée par le pilote.

Pour que le programme Java soit en mesure d'accéder à la base de données présente sous SQL server Express, il est nécessaire de télécharger et d'installer le pilote JDBC pour SQL Server. Ce pilote pourra être téléchargé ici. Il s'agit de la version française du pilote en effet toute la documentation associée va être en français, ce qui est toujours intéressant.

Configurer SQL Express

Pour pouvoir accéder à la base de données hébergée par SQL Express, les 2 services suivants doivent être démarrés:

  • MSSQLServer
  • SQLBrowser

Pour être en mesure d'accéder à l'instance depuis un outils distant, il est nécessaire de configurer la surface d'exposition. En effet par défaut les connexion distantes ne sont pas autorisées.

configuration dela surfaced'exposition

Installation du pilote JDBC

A partir de l'archive sqljdbc_1.0.809.102_fra.zip télécharger, il est possible de procéder à l'installation. En fait il s'agit d'une simple décompression de l'archive dans un dossier.

Les 2 éléments les plus importants de ce dossier sont:

  • le fichier sqljdbc.jar qui représente le pilote JDBC. C'est cette archive JAR qui doit être référencée par le projet Java, et accessible lors de l'exécution pour permettre au programme Java d'accéder à l'instance SQL Server Express.
  • Dans le dossier help le fichier default.htm qui permet de visualiser la documentation

La mise en place du code Java

Toute l'écriture du code Java, est réalisée depuis Eclipse.

La première étape consiste donc à créer le projet AccesSQLExpress. Au sein de ce projet la classe TestJDBC est définie de la façon suivante.

Extrait classe TestJDBC

Pour être en mesure d'utiliser le pilote JDBC l'archive JAR sqljdbc est ajoutée au projet par l'intermédiaire d'un simple copier/coller. Puis l'archive est ajoutée au chemin de compilation. Cette action est faite depuis les propriétés du projet.

Organisation du projet

Dans le code Java Les 2 opérations principales sont l'inscription du pilote puis l'obtenttion d'une connexion.

enrigistrement du pilote

Puis une instruction est définie à partir de la connexion. La requête SELECt est exécutée par rapport à cette instruction et le ResultSet correspondant est parcouru afin d'afficher le résultat.

exécution d'une requête

Le programme complet est donc:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;

public class TestJDBC {
	public static void main(String[] args) throws SQLException {
		Connection cnx=null;
		Statement rqt=null;
		ResultSet rs=null;
		try{
			//Référencer le pilote
			DriverManager.registerDriver(new SQLServerDriver());
			//Obtenir une connexion
			cnx=DriverManager.getConnection(
					"jdbc:sqlserver://127.0.0.1;instanceName=SQLEXPRESS;user=userTest;password=secret");
			//Exécuter la requête
			rqt=cnx.createStatement();
			rs=rqt.executeQuery("Select nom, prenom from individus");
			while (rs.next()){
				System.out.println(rs.getString(1));
			}
		}catch (SQLException sqle){
			do{
				System.out.println("SQL STATE : "+sqle.getSQLState());
				System.out.println("ERROR CODE: "+sqle.getErrorCode());
				System.out.println("MESSAGE   : "+sqle.getMessage());
			}while(sqle!=null);
		}catch(Exception e){
			//ecrire le message sur la console standard.
			e.printStackTrace();
		}finally{
			if (rs!=null) rs.close();
			if (rqt!=null) rqt.close();
			if (cnx!=null) cnx.close();
		}
	}
}