Jsp Tomcat cours Atelier introduction CONNEXION A UNE BASE DE DONNEES Objectif. Créez un projet permettant le développement d’une application cliente d’une base de données Oracle. Pour utiliser cette base, vous devez créer une source de données (lien ODBC) nommée ODBC_COMMERCIAL (panneau de configuration, outils d’administration, ODBC) puis le tester. Le lien ODBC_COMMERCIAL est pris en compte par la clacce jdbc qui représente l’interface java avec odbc. Dans un premier temps, nous utiliserons l’architecture Vue de Page qui mélange dans une page jsp du code html et du code java. Cette approche est très facile à comprendre mais elle ne prend pas en charge l’approche métier qui sera vue avec l’architecture vue de page avec bean. Schéma relationnel Objectif. Recherchez puis listez des données d’une base de données. Notions étudiées. Utilisez les classes java.sql.Connection conn ; java.sql.Statement stmt; java.sql.ResultSet results; java.sql.ResultSetMetaData metaData; Le résultat à obtenir. Application permettant de lister les articles de la table ARTICLE. Etape 1 : se connecter à la base de données Oracle Nous voulons obtenir la liste des familles d’articles et la présenter dans une zone de liste. Problème Solution Se connecter à la base Oracle Utiliser un objet java.connection. Créez la page html index.html depuis le bloc note : Copiez cette page dans votre répertoire virtuel. <HTML> -1- Jsp Tomcat cours Atelier introduction <form method=POST action="src/classconnexion.jsp"> <H1>Bienvenue chez Mobilier de Bureau </H1> <p> Utilisez le bouton pour visualiser les articles</p> <input type=submit value=Requête SQL> </HTML> Créez la page classconnexion.jsp dans un sous répertoire src : <%@ page language="java" import="java.sql.*" %> <html> <form method=POST action="../index.html"> <head><title>JSP Page</title></head> <body> <p> Voici la liste d'articles de votre requête </p> <br> <%-- <jsp:useBean id="beanInstanceName" scope="session" class="package.class" /> --%> <%-- <jsp:getProperty name="beanInstanceName" property="propertyName" /> -%> <%! java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; java.sql.ResultSetMetaData metaData; int numCols; String ligne; %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ results = stmt.executeQuery("Select * from clientel"); metaData = results.getMetaData(); numCols = metaData.getColumnCount(); %> <% /** Récupération de l'environnement de la connexion Connection is: <%= conn.toString() <br> statement is: <%= stmt.toString() <br> */ %> <% while (results.next()) { for(int i=1 ; i <= numCols; i++) { ligne = results.getString(i) + " "; %> /** On affiche la ligne */ <%= ligne %> -2- Jsp Tomcat cours Atelier introduction <% } results.close(); conn.close(); %> <br> <% } %> <br> <br> </body> <input type=submit value=Retour> </html> Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/index.html. Retenir : - on crée un objet connexion com - on crée un objet de type recordset results Un travail plus complexe : Les articles d’une commande Le résultat à obtenir. Application permettant de lister les articles d’une commande choisie dans une liste déroulante Etape 1 Placer les numéros de commande et les dates de commande dans une zone de liste Créez la page listederoulante.JSP <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenue chez Mobilier de Bureau </H1> -3- Jsp Tomcat cours Atelier introduction <p>Veuillez choisir votre commande</p> <FORM METHOD="POST" ACTION="famille.jsp" > <SELECT NAME="commande" SIZE = "4" > <%! /** Déclaration des variables */ java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; java.sql.ResultSetMetaData metaData; String ligne; String wnocd; %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ results = stmt.executeQuery("SELECT NO_COMMAND FROM COMMANDES"); while (results.next()) { // on récupère le deuxième paramètre de la requête wnocd = results.getString(1); %> <option value=<%=wnocd%> > <%=wnocd%> </option> <% }; results.close(); conn.close(); %> </SELECT> <INPUT TYPE="SUBMIT" value="Rechercher les articles"> </FORM> </BODY> </HTML> Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/chris/src /listederoulante.JSP -4- Jsp Tomcat cours Atelier introduction Etape 2 : Transmettre le numéro de commande à la page famille.jsp Problème Notre page listederoulante a un petit défaut. Que transmet-elle dans son formulaire à la page famille.JSP. Réponse : le numéro de commande. Hors nous allons avoir besoin du numéro de cette commande. Solution Donnez le numéro de commande comme valeur à chaque option de la zone de liste. D’où l’écriture : <option value=<%=wnocd%><%=wnocd%> </option> Etape 3 : Construire la page famille.jsp Solution Notre page famille doit afficher les données dans un tableau, elle utilise une requête paramétrée. La valeur du p aramètre vient de la page listederoulante.jsp Code de la page famille.jsp <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenue chez Mobilier de Bureau <BR> Commande : <%=request.getParameter("commande") %> </H1> <TABLE border=1 cellPadding=1 cellSpacing=1 width="75%"> <TR> <TD align=middle>N° Article</TD> <TD align=middle>Désignation</TD> <TD align=middle>Qte commandée</TD> </TR> <%! java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; java.sql.ResultSetMetaData metaData; String mysql; String wnoart ; String wlibart; int wqte; %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On définit une requête sql paramétée */ mysql= "SELECT ARTICLES.NO_ARTICLE, LIB_ARTICLE, QTE_CDEE"; mysql=mysql + " FROM ARTICLES, DETAIL_CDE, COMMANDES"; mysql=mysql + " WHERE COMMANDES.NO_COMMAND = '" ; mysql=mysql + request.getParameter("commande") + "'" ; mysql=mysql + " AND COMMANDES.NO_COMMAND = DETAIL_CDE.NO_COMMAND"; mysql=mysql + " AND DETAIL_CDE.NO_ARTICLE = ARTICLES.NO_ARTICLE" ; -5- Jsp Tomcat cours Atelier introduction /** On récupère les données dans un recordset */ results = stmt.executeQuery(mysql); while (results.next()) { // on récupère le deuxième paramètre de la requête wnoart = results.getString(1); wlibart = results.getString(2); wqte = results.getInt(3); %> <TR> <TD> <%=wnoart%> </TD> <TD> <%=wlibart%> </TD> <TD> <%=wqte%> </TD> </TR> <% }; results.close(); conn.close(); %> </TABLE> </BODY> <form method="post" action="listederoulante.jsp"> <p><input type="submit" value="Retour"></p> </form> </HTML> Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/famille.JSP. Gestion d’une transaction Application permettant de modifier des données dans une base relationnelle. Attention, pour la réalisation de cet exercice, je vous demande de dupliquer la base COMMERCIAL.MDB et de créer un lien ODBC personnel. -6- Jsp Tomcat cours Atelier introduction Le résultat à obtenir. On recherche un article à partir de son numéro et on modifie son prix de la valeur d’un pourcentage saisie dans la feuille de départ. Etape 1 : Construire la page de recherche d’un article à partir d’une liste déroulante listearticles.JSP Notre page listearticles doit afficher les numéros d’article dans une liste déroulante et doit passer le numéro d’article choisi à la page modifarticle.JSP. -7- Solution Donnez le numéro d’article comme valeur à chaque option de la zone de liste. Jsp Tomcat cours Atelier introduction Code de la page listearticles.JSP <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenue chez Mobilier de Bureau </H1> <p>Veuillez choisir un numéro d'article à modifier</p> <FORM METHOD="POST" ACTION="modifarticle.jsp" > <SELECT NAME="articles" SIZE = "4" > <%! /** Déclaration des variables */ java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; String wnoart; %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ results = stmt.executeQuery("SELECT NO_ARTICLE FROM ARTICLES"); while (results.next()) { // on récupère le deuxième paramètre de la requête wnoart = results.getString(1); %> <option value=<%=wnoart%> > <%=wnoart%> </option> <% }; results.close(); conn.close(); %> </SELECT> <INPUT TYPE="SUBMIT" value="Modifier un article"> </FORM> </BODY> </HTML> Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/listearticles.JSP. -8- Jsp Tomcat cours Atelier introduction Etape 2 : Construire la page d’affichage des caractéristiques de l’article choisi , saisie de la valeur du pourcentage et appel de la page de modification Notre page modifarticle doit afficher les caractéristiques de l’article et passer comme paramètres à la page modification.jsp le numéro d’article et la valeur du pourcentage. Solution Créez une variable de type H d’article choisi. Code de la page modifarticle.jsp <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenuee chez Mobilier de Bureau <BR> Article : <%=request.getParameter("article") %> </H1> <%! /** Déclaration des variables */ java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; String wnoart; String mysql; %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ mysql = "SELECT NO_ARTICLE, LIB_ARTICLE, PRIX_ART"; mysql = mysql + " FROM ARTICLES"; mysql = mysql + " WHERE NO_ARTICLE = '"; mysql = mysql + request.getParameter("article") + "'" + " ;"; results = stmt.executeQuery(mysql); if ( results.next() ) { %> <TD> Libellé : <%= results.getString(2) %> <BR> </TD> <TD> Prix : <%= results.getString(3) %> Euros <BR> </TD> <% } else %> <TD> Pas d'article correspondant </TD> <% results.close(); conn.close(); %> <FORM ACTION="modification.jsp" METHOD="POST"> Pourcentage d'augmentation : <INPUT TYPE="TEXT" NAME="Rpour"> <BR> <BR> <BR> <INPUT TYPE="HIDDEN" NAME="NOART" VALUE=<%=request.getParameter("article")%> > <INPUT TYPE="SUBMIT" value="Modifier l'article" > </FORM> </BODY> </HTML> -9- Jsp Tomcat cours Atelier introduction Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/listearticles.jsp. Etape 3 : Construire la page qui forme la requête de modification Notre page modification doit former une requête paramétrée de modification de données. Solution Faites afficher dans une variable votre requête pour la contrôler. Code de la page modification.jsp <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenuee chez Mobilier de Bureau </H1> Montant du pourcentage : <%=request.getParameter("Rpour") %> % <BR> Article concerné : <%=request.getParameter("NOART") %> <BR> <FORM ACTION="listearticles.jsp" METHOD="POST"> <INPUT TYPE="SUBMIT" value="Retour"> </FORM> <P>Résultat de la Modification de l'article</P> <%! float wpour; String wnoart; %> <% wpour = Float.parseFloat(request.getParameter("Rpour")); wnoart = request.getParameter("NOART"); int rep = maj(wpour,wnoart); if( rep == 1){ %> <p> Modification effectuée : <%= rep %> </p> <%}else {%> <p> Modification refusée<%=rep }%></p> </BODY> </HTML> <%! public int maj (float pr, String pa) throws IOException, ServletException,SQLException,ClassNotFoundException { java.sql.Connection conn; java.sql.Statement stmt; String mysql; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On exécute une requête d'insertion */ mysql= "UPDATE ARTICLES "; mysql = mysql + " SET PRIX_ART = PRIX_ART * (1 + " + pr + " / 100 )"; mysql = mysql + " WHERE NO_ARTICLE = '" + pa + "'" + ";"; int rep =stmt.executeUpdate(mysql); return rep; - 10 - Jsp Tomcat cours Atelier introduction } %> Copiez cette page dans votre répertoire virtuel. Testez en appelant l’ensemble des pages depuis un navigateur : //Localhost:8080/votre repertoire/modification.jsp Ecriture d’une requête dans un javabean Nous allons à présent reprendre l’exercice qui affiche le détail d’une commande sélectionnée dans une liste déroulante. Notre application va se composer d’un fichier de départ liste.jsp, d’un bean famillebean.jsp qui contient la requête de sélection et d’un fichier d’affichage appelbean.jsp. Ce dernier fichier va appeler des méthodes contenus dans le bean et notamment récupéré le résultat de la reqyuête. Vous remarquerez que les méthodes du bean sont appelés à travers l’objet. Créez la page liste.jsp <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenue chez Mobilier de Bureau </H1> <p>Veuillez choisir votre famille d'articles</p> <FORM METHOD="POST" ACTION="appelbean.jsp" > <SELECT NAME="ncommand" SIZE = "4" > <%! /** Déclaration des variables */ java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; java.sql.ResultSetMetaData metaData; String ligne; String wnocd; %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ results = stmt.executeQuery("SELECT NO_COMMAND,DATE_CDE FROM COMMANDES"); while (results.next()) { // on récupère le deuxième paramètre de la requête wnocd = results.getString(1); %> <option value=<%=wnocd%> > <%=wnocd%> </option> <% }; - 11 - Jsp Tomcat cours Atelier introduction results.close(); conn.close(); %> </SELECT> <INPUT TYPE="SUBMIT" value="Rechercher les articles"> </FORM> </BODY> </HTML> Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/liste.jsp. Créez la page appelbean.jsp <jsp:useBean id="famillebean" scope="page" class="work.famillebean"> <jsp:setProperty name="famillebean" property="*"/> </jsp:useBean> <html> <head> <title>Résultat de l'utilisation d'un useBean</title> </head> <body> <h1>Liste de vos articles</h1> <p> N° commande : <jsp:getProperty name="famillebean" property="ncommand"/>.</p> <TABLE border=1 cellPadding=1 cellSpacing=1 width="75%"> <TR> <TD align=middle>N° Article</TD> <TD align=middle>Désignation</TD> <TD align=middle>Qte commandée</TD> </TR> <%! int i; String noart; String libart; int qte; java.sql.ResultSet rs; %> <% rs = famillebean.getResult(); while (rs.next()) { // on récupère le deuxième paramètre de la requête noart = rs.getString(1); libart = rs.getString(2); qte = rs.getInt(3); %> <TR> <TD> <%=noart%> </TD> <TD> <%=libart%> </TD> <TD> <%=qte%> </TD> </TR> <% }; %> </table> </body> <form method="post" action="liste.jsp"> <p><input type="submit" value="Retour"></p> </form> - 12 - Jsp Tomcat cours Atelier introduction </html> Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/liste.jsp. L’exemple nous montre l’utilisation d’un objet JSP. Cette page crée une instance de fammillebean avec une portée de niveau page et utilise la forme property= »* » pour définir le nom du bean et ses propriétés. Vous pouvez noter l’utilisation de l’action jsp :getproperty pour obtenir le contenu d’une variable du bean par l’intermédiaire d’une méthode. Par contre, pour obtenir les données de la requête, il faut appeler une méthode de famillebean. Création du bean fammillebean.java /* * famillebean.java package work; Created on 29 avril 2002, 15:18 */ import java.beans.*; import java.io.*; import java.sql.*; import java.io.PrintWriter; import java.io.IOException; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.util.Vector; import java.lang.String; /** @author christian * @version */ public class famillebean { private java.sql.Connection conn; private java.sql.Statement stmt; private java.sql.ResultSet result; private String mysql; private String ncommand; public String noart ; public String libart; public famillebean () { } public void setNcommand (String ncommand) { this.ncommand = ncommand; } public String getNcommand() { return ncommand; } public java.sql.ResultSet getResult() throws IOException,SQLException,ClassNotFoundException { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On définit une requête sql paramétée */ mysql= "SELECT ARTICLES.NO_ARTICLE, LIB_ARTICLE, QTE_CDEE"; - 13 - Jsp Tomcat mysql=mysql mysql=mysql mysql=mysql mysql=mysql mysql=mysql cours Atelier + + + + + introduction " FROM ARTICLES, DETAIL_CDE, COMMANDES"; " WHERE COMMANDES.NO_COMMAND = '" ; ncommand + "'" ; " AND COMMANDES.NO_COMMAND = DETAIL_CDE.NO_COMMAND"; " AND DETAIL_CDE.NO_ARTICLE = ARTICLES.NO_ARTICLE" ; /** On récupère les données dans un recordset */ result =stmt.executeQuery(mysql); return result; } public void finalize() throws IOException,SQLException,ClassNotFoundException { conn.close( ); result.close( ); } } Copiez cette page dans votre répertoire virtuel.. Déploiement de votre application - créez dans votre répertoire le sous répertoire \WEB-INF\classes - compilez votre bean sur le serveur avec la commande : javac –d \WEB-INF\classes fammilebean.java Un répertoire nommé work sera automatiquement créé et vous y verrez votre fichier fammillebean.class - vous devez redémarrer le serveur TOMCAT pour que votre déploiement soit pris en compte. Gestion d’une transaction Nous allons réaliser une application qui utilise une transaction composée de plusieurs requêtes. Nous voulons insérer un article dans une commande à condtion que la quantité disponible soit supérieure à la quantité désirée. En cas de succès, la transaction est validée , et en cas d’échec la transaction est refusée, les requêtes sont alors annulées et la base revient dans l’état qui précédait la transaction. - 14 - Jsp Tomcat cours Atelier introduction Etape 1 : Construire la page de recherche de la commande, de l’article choisi et de saisie de la quantité à commander : listeartcde.jsp Code de la page listeartcde.jsp <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenue chez Mobilier de Bureau </H1> <p>Veuillez choisir votre numéro de commande</p> <FORM METHOD="POST" ACTION="insertion.jsp" > <SELECT NAME="commande" SIZE = "4" > <%! /** Déclaration des variables */ java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet results; java.sql.ResultSetMetaData metaData; String wnocd; String wnoart; - 15 - Jsp Tomcat cours Atelier introduction %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ results = stmt.executeQuery("SELECT NO_COMMAND,DATE_CDE FROM COMMANDES"); while (results.next()) { // on récupère le deuxième paramètre de la requête wnocd = results.getString(1); %> <option value=<%=wnocd%> > <%=wnocd%> </option> <% }; results.close(); conn.close(); %> </SELECT> <BR> <BR> <p>Veuillez choisir votre article à insérer</p> <SELECT NAME="article" SIZE = "4" > <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); stmt = conn.createStatement(); /** On récupère les données dans un recordset */ results = stmt.executeQuery("SELECT NO_ARTICLE FROM ARTICLES"); while (results.next()) { // on récupère le deuxième paramètre de la requête wnoart = results.getString(1); %> <option value=<%=wnoart%> > <%=wnoart%> </option> <% }; results.close(); conn.close(); %> </SELECT> <BR> <BR> Quantité à commander : <INPUT TYPE="TEXT" NAME="qte"> <BR> <BR> <BR> <BR> <INPUT TYPE="SUBMIT" value="Insérer l'article"> - 16 - Jsp Tomcat cours Atelier introduction </FORM> </BODY> </HTML> Copiez cette page dans votre répertoire virtuel. Testez en appelant cette page depuis un navigateur : //Localhost:8080/votre repertoire/listeartcde.jsp. Etape 2 : Construire la page d’insertion Notre page d’insertion va lancer la requête d’insertion de la nouvelle ligne puis va contrôler les quantités et valider ou non la transaction. Code de la page insertion.jsp <%@page language="java" import="java.sql.*"%> <HTML> <BODY> <H1>Bienvenue chez Mobilier de Bureau </H1> Commande concernée : <%=request.getParameter("commande") %> <BR> Article concerné : <%=request.getParameter("article") %> <BR> Quantité à commander : <%=request.getParameter("qte") %> <BR> <P>Résultat de la transaction</P> <%! int wqte; String wnoart; String wnocd; boolean rep; public class Message { private String m; public void SetMes( String me) { m = me; } public String GetMes() { return m; } }; Message m; String s; %> <% wqte = Integer.parseInt(request.getParameter("qte")); wnoart = request.getParameter("article"); wnocd = request.getParameter("commande"); m = new Message(); rep = transaction(wqte,wnocd,wnoart,m); if ( rep){ %> <p> Transaction effectuée </p> <%}else {%> <p> Transaction refusée </p> <BR> <p> Raison : <%= m.GetMes()%> </p> <%}%> </BODY> <FORM ACTION="listeartcde.jsp" METHOD="POST"> <INPUT TYPE="SUBMIT" value="Retour"> - 17 - Jsp Tomcat cours Atelier introduction </FORM> </HTML> <%! public boolean transaction (int q, String c, String a, Message m) throws IOException, ServletException,SQLException,ClassNotFoundException { java.sql.Connection conn; java.sql.Statement stmt; java.sql.ResultSet rs; String mysql; String wt1="";; String wt2=""; String tempo; int wqte; boolean rep=false; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /** On définit une connexion à travers JDBC et ODBC */ conn = java.sql.DriverManager.getConnection("jdbc:odbc:odbc_commercial",«scott », «tiger »); try { conn.setAutoCommit(false); stmt = conn.createStatement(); /** On crée une requête d'insertion */ mysql= "INSERT INTO DETAIL_CDE ( NO_COMMAND, NO_ARTICLE, QTE_CDEE, LIVREE ) "; mysql = mysql + " VALUES ('" + c + "'," + "'" + a + "'," + q + "," + "'F' ) ;" ; /** On exécute la requête d'insertion de la ligne de commande */ stmt.execute(mysql); /** On crée une requête de sélection */ mysql= "SELECT QTE_DISPO FROM ARTICLES "; mysql = mysql + " WHERE NO_ARTICLE = " + "'" + a + "'" + ";" ; rs = stmt.executeQuery(mysql); if ( rs.next() ) { wqte = rs.getInt(1); rep = (wqte >= q); if (rep) { /** On crée une requête de mise à jour */ mysql= "UPDATE ARTICLES "; mysql = mysql + " SET QTE_DISPO = QTE_DISPO -" + q ; mysql = mysql + " WHERE NO_ARTICLE = " + "'" + a + "'" + ";" ; /** On exécute la requête de mise à jour */ - 18 - Jsp Tomcat cours Atelier introduction stmt.executeUpdate(mysql); conn.commit(); } else { /** On arrête l'insertion de l'article dans la commande */ wt1 = wt1.valueOf(wqte); wt2 = wt2.valueOf(q); tempo = "Quantité diponible :" + wt1 + " inférieure à quantité commandée :" + wt2; m.SetMes(tempo); conn.rollback(); } } } catch (SQLException e) { // on gère d'éventuelles exceptions } finally { conn.close(); //rs.close (); } return rep; } %> Copiez cette page dans votre répertoire virtuel. Testez en appelant l’ensemble des pages depuis un navigateur : //Localhost:8080/votre repertoire/listeartcde.jsp Exercices Réalisez une application permettant de rechercher pour un vendeur - le détail de ses ventes - pour chaque vente, le détail des articles Affichez le détail et le chiffre d’affaires des ventes entre deux dates Réalisez une application permettant de modifier les quantités commandées de différents articles d’une commande. Le détail de la commande peut être affiché dans un tableau et le ou les articles à modifier sont sélectionnés à partir de cet affichage. - 19 -