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.
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.
Pour pouvoir accéder à la base de données hébergée par SQL Express, les 2 services suivants doivent être démarrés:
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.
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:
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.
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.
Dans le code Java Les 2 opérations principales sont l'inscription du pilote puis l'obtenttion d'une connexion.
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.
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();
}
}
}