CONNEXION à une base de données

publicité
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 -
Téléchargement