JDBC ou comment manipuler une base de donnes
JDBC ou comment manipuler une base de données en Java ?
Introduction • JDBC: Java database connectivity, c’est du JAVA ! – API développée par SUN pour permettre à des applications Java d'accéder à des bases de données relationnelles quelconques. • Les étapes principales – Se connecter à une base de données – Envoyer une requête SQL – Manipuler le résultat • JDBC: un driver (pilot) fournit des outils pour ces fonctions
Driver Protocole Natif JDBC Driver Manager API JDBC Application JAVA ? Appels SQL Base de Données Définition JDBC pour executer, depuis un programme Java, l'ensemble des Le pilote. . . L’API JDBC permet d'executer des instructions ordres SQL reconnus par la base de donnees. SQL. cible. établit le lien avec la base de donnees, en sachant JDBC fait partie du JDK (Java Development Kit) : “lui parler". La connexion. . . Dans JDBC : des classes chargées de gérer un pilote. . . Paquage java. sql Elle pilotes peut s'etablir on donne l'adresse la BD a laquelle se connecter. . . Des existent. SIpour my. SQL, Oracle, de post. Gres. SQL, ACCESS, . . . import java. sql. *;
Interfaces de JDBC (2) get. Connection() Canal de communication TCP vers une BD create. Statement() gère les requêtes SQL execute. Query() gère l’accès aux tuples d’un résultat
Préparatifs • D’abord installer un driver JDBC – E. g. SQL server 2000 de Microsoft http: //msdn 2. microsoft. com/en-us/sql/aa 336272. aspx – My. SQL : My. SQL Connector : mysql-connector- java-5. 0. 8 -bin. jar (le plus récent ou le plus adapté à votre version java)
Étape 1: charger le pilote • Charger le pilote (driver) – contient toutes les classes nécessaire pour communiquer avec une base de données – utiliser la méthode for. Name de la classe Class – EX : • My. SQL: Class. for. Name("com. mysql. jdbc. Driver"); • Pont ODBC-JDBC Class. for. Name("sun. jdbc. odbc. Jdbc. Odbc. Driver"); – Cette méthode charge en mémoire la classe demandée et exécute son éventuel bloc static. • static { Base. Driver. register. Driver(new SQLServer. Driver()); } – Pour que cela fonctionne, il faut définir la variable d’environnement CLASSPATH et inclure le répertoire contenant les classes du driver
Étape 2: établir une connexion • Pour établir la connexion avec SQL Server, il faut préciser – le nom de la machine (ou son numéro IP), – le port où le service SQL est démarré (par ex : 3306 pour localhost), – le nom de la base de données, – le login utilisé ainsi que son mot de passe. try { String str. Class. Name = "com. mysql. jdbc. Driver « ; Class. for. Name(str. Class. Name); Charger le pilote String str. Url = "jdbc: mysql: //localhost: 3306/" + db. Name; Connection conn = Driver. Manager. get. Connection(str. Url, login="root", passwd=""); //. . . Établir la connexion conn. close(); } catch(Class. Not. Found. Exception e) { opérations System. err. println("Driver non chargé !"); e. print. Stack. Trace(); } catch(SQLException e) { //. . . }
Étape 2: établir une connexion • Établir la connexion avec My. SQL – Driver. Manager: sa méthode statique get. Connection va créer un objet de connexion de la classe Connection.
Étape 3: Requête SQL • L’exécution d’une requête SQL passe par l'utilisation d'une classe, spécifique au pilote utilisé, implémentant l'interface Statement • Un objet de type Statement se doit d'être adapté à la base manipulée. JDBC ne fournit que l'interface Statement, qui est implantée par différentes classes du pilote chargé • Obtenir un objet Statement: avec la méthode create. Statement.
Exemple try { String str. Class. Name = "com. mysql. jdbc. Driver"; Class. for. Name(str. Class. Name); String str. Url = "jdbc: mysql: //localhost: 3306/Ma. Base" ; Connection conn = Driver. Manager. get. Connection(str. Url, "root", ""); String str. Insert = "INSERT INTO T_Users (Login, Password, Connection. Number) VALUES ('Toto', 'Titi', 0); "; Statement st 0 = conn. create. Statement(); st 0. execute. Update(str. Insert); conn. close(); } catch(Class. Not. Found. Exception e) { //. . . } catch(SQLException e) { //. . . } Créer un Statement Exécuter un ordre SQL
Exécuter une requête SELECT • • l'ordre SQL "SELECT * FROM T_Users; " L'appel à "execute. Query" renvoie au final un objet de type Result. Set try { String str. Class. Name = "com. mysql. jdbc. Driver"; Class. for. Name(str. Class. Name); String str. Url = "jdbc: mysql: //localhost: 3306/Ma. Base; " Connection conn = Driver. Manager. get. Connection(str. Url, "root", ""); Statement st 1 = conn. create. Statement(); String str. Query = "SELECT * FROM T_Users; "; String str. Query 2 = « select login from T_users » ; Result. Set rs 1 = st 1. execute. Query(str. Query); Result. Set rs 2 = st 1. execute. Query(str. Query 2); //. . . Utilisation du Result. Set. . . conn. close(); } Requête Exécuter la requête et stocker le résultat
Manipuler le résultat • On peut identifier chaque colonne de la base de donnée – Par son index – Par son nom String Query = "SELECT * FROM T_Users; "; Result. Set rs 1 = st 1. exexcute. Query(Query); while(rs 1. next()) { String pass = rs 1. get. String( « Password » ); System. out. print("Id[" + rs 1. get. Int(1) + "]" + rs 1. get. String(2) + "[" + rs 1. get. String("Password") + "] " + rs 1. get. Int("Connection. Number") ); } conn. close();
Modifier le résultat ou la base • Se positionner sur le premier enregistrement – rs 1. first(); • Ou avancer jusqu’à l’élément voulu : rs 1. next() • Modifie la valeur du Password dans le résultat – rs 1. update. String("Password", "toto"); • Pour appliquer les modifications dans la base de données: – rs 1. update. Row();
JDBC Quelques notions de Meta Données (Metadata) 1. Les meta données sont des données sur les données. 2. Chaque Result. Set possède ses propres Meta. Données. 3. Elles sont utilisées pour obtenir les noms des colonnes dans un Result. Set ainsi que le type des données qui se trouvent dans chacune d'elles. Obtenir les meta-données Utiliser les meta-données Les méta données sont stockées dans un Result. Set. Meta. Data.
Autres opérations • Stocker une procédure • Gérer des transactions • …
- Slides: 15