Вы находитесь на странице: 1из 15

JDBC: manipuler une base de donnes en Java

IFT6800 E 2007 Jian-Yun Nie

Intermdiaire
JDBC: Java database connectivity
Cette API tait dveloppe par SUN pour permettre des applications Java d'accder des bases de donnes relationnelles quelconques.

Les tapes principales


Se connecter une base de donnes Envoyer une requte SQL Manipuler le rsultat

JDBC: un driver (pilot) fournissant des outils pour ces fonctions

Prparatif
Installer un driver JDBC
E.g. SQL server 2000 de Microsoft
http://msdn2.microsoft.com/en-us/sql/aa336272.aspx

pont ODBC/JDBC (Open DataBase Connectivity)

tape 1: charger le pilote


Charger le pilote (driver)
Pilote: contient toutes les classes ncessaire pour communiquer avec une base de donnes il faut utiliser la mthode forName de la classe Class E.g.
SQL Server 2000: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Pont ODBC-JDBC Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Cette mthode charge en mmoire la classe demande et excute son ventuel bloc static.
static { BaseDriver.registerDriver(new SQLServerDriver()); }

Pour que cela fonctionne, il faut dfinir la variable denvironnement CLASSPATH pour inclure le rpertoire contenant les classes du driver

tape 2: tablir une connexion


Pour tablir la connexion avec SQL Server, il faut prciser le nom de la machine (ou son numro IP), le port o le service SQL est dmarr (quasiment toujours 1433), le nom de la base de donnes, le login utilis ainsi que son mot de passe.
try { String strClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String strUrl = "jdbc:microsoft:sqlserver://hostname:1433;" + "user=sa;password=pass;DatabaseName=dbName"; Charger le pilote Class.forName(strClassName); Connection conn = DriverManager.getConnection(strUrl); tablir la connexion // . . . conn.close(); oprations } catch(ClassNotFoundException e) { System.err.println("Driver non charg !"); e.printStackTrace(); } catch(SQLException e) { // . . . }

tape 2: tablir une connexion


tablir la connexion avec MySQL
DriverManager: la mthode statique getConnection va crer un objet de connexion Paramtre: le protocole et le sous-protocole:
jdbc:odbc:DsnName DSN (Data Source Name) Connection conn = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:DsnName"); // . . . conn.close(); } catch(ClassNotFoundException e) { System.err.println("Driver non charg !"); e.printStackTrace(); } catch(SQLException e) { // . . . }

tape 3: Requte SQL


Lexcution dune requte SQL passe par l'utilisation d'une classe, spcifique au pilote utilis, implmentant l'interface Statement Un objet de type Statement se doit d'tre adapt la base manipule. JDBC ne fournit que l'interface Statement, qui est implante par diffrentes classes dans un pilote Obtenir un objet Statement: avec la mthode createStatement.

Exemple
try { String strClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String strUrl = "jdbc:microsoft:sqlserver://hostname:1433;" + "user=sa;password=pass;DatabaseName=dbName"; String strInsert = "INSERT INTO T_Users " + "(Login, Password, ConnectionNumber) " + "VALUES ('Toto', 'Titi', 0);"; Class.forName(strClassName); Connection conn = DriverManager.getConnection(strUrl);

Statement stAddUser = conn.createStatement(); stAddUser.executeUpdate(strInsert);


conn.close(); } catch(ClassNotFoundException e) { // . . . } catch(SQLException e) { // . . . }

Crer un Statement

Excuter un ordre SQL

Excuter une requte SELECT


l'ordre SQL "SELECT * FROM T_Users;" L'appel "executeQuery" renvoie au final un objet de type ResultSet
try { String strClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String strUrl = "jdbc:microsoft:sqlserver://hostname:1433;" + "user=sa;password=pass;DatabaseName=dbName"; String strQuery = "SELECT * FROM T_Users;"; Class.forName(strClassName); Connection conn = DriverManager.getConnection(strUrl); Statement stLogin = conn.createStatement();
ResultSet rsLogin = stLogin.executeQuery(strQuery); // . . . Utilisation du ResultSet . . . conn.close();

requte

Excuter la requte et stocker le rsultat

} catch(ClassNotFoundException e) { // . . . } catch(SQLException e) { // . . . }

Manipuler le rsultat
On peut identifier chaque colonne de la base de donne
Par son index Par son nom

String strQuery = "SELECT * FROM T_Users;"; ResultSet rsUsers = stUsers.exexcuteQuery(strQuery); while(rsUsers.next()) { System.out.print("Id[" + rsUsers.getInt(1) + "]" + rsUsers.getString(2) + "[" + rsUsers.getString("Password") + "] " + rsUsers.getInt("ConnectionNumber") ); } rsUsers.close();

Plusieurs mode de parcours


st = conn.createStatement(type, mode);
Type == ResultSet.TYPE_FORWARD_ONLY ResultSet.TYPE_SCROLL_SENSITIVE ResultSet.TYPE_SCROLL_INSENSITIVE Mode == ResultSet.CONCUR_READ_ONLY ResultSet.CONCUR_UPDATABLE

Modifier le rsultat ou la base


Se positionne sur le premier enregistrement
rsUsers.first();

Ou avancer jusqu llment voulu Modifie la valeur du Password dans le rsultat


rsUsers.updateString("Password", "toto");

Pour appliquer les modifications dans la base de donnes:


rsUsers.updateRow();

Autres oprations
Stocker une procdure Grer des transactions

Rcapitulation du cours
Les lments pour faire fonctionner un programme
Matriels: mmoire, CPU, bus, registres, disque, priphriques, Systme dexploitation: grer les matriels, outils de base pour tlcommunication, gestion et manipulation de fichiers, Applications: base de donnes, programme dutilisateur Communication entre des applications et entre des ordinateurs
Protocole Connexion et transfert

Schma typique
Programmation
Un programmeur crit un programme en un langage (Java) Compilation, tests Livraison lutilisateur

Utilisation
Sur Ordinateur 1, on installe lenvironnement appropri
Systme dexploitation Les outils ncessaires pour lexcution du programme (ventuellement un compilateur) Connexion Internet

un utilisateur lance un programme


Ce programme est excut ventuellement
accder aux donnes sur le disque Demander des donnes lutilisateur Demander connecter un serveur Demander des informations du serveur Traiter des information crire sur le disque, dans une base de donnes ou sur le serveur Affichage lutilisateur

Вам также может понравиться