Pb de non exécution de requête sql en java

Fermé
Nikko - 29 févr. 2008 à 11:12
 mifi - 16 juin 2008 à 12:19
Bonjour,

Je suis en stage en entreprise et je dois réaliser un projet, une appli web.

Cependant, je rencontre une difficulté... Voici mon code correspondant au problème :

classe ActionRéservation

public class ActionReservation implements Action{

private ADO ado = new ADO();

public String traiter(HttpServletRequest req, HttpServletResponse rep){

String qtite = req.getParameter("quantite");

try {
//quantité non renseignée
if(qtite.isEmpty()){
req.getSession().setAttribute("message", "Veuillez renseigner la quantité.");
//quantité à réserver supérieure au stock
}else if(ado.quantite(req, rep)<0){
req.getSession().setAttribute("message", "Le stock n'est pas suffisant pour supporter cette réservation.");
//réservation
}else{
ado.nouvellereservation(req, rep);
ado.retirestock(req, rep);
req.getSession().setAttribute("message", "Votre réservation a bien été effectuée.");
}

//gestion des erreures
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//deconnexion
try {
ado.deconnexion();
} catch (SQLException e) {
e.printStackTrace();
}
//résultat sur page JSP
return "resultat.jsp";
}
}


Fonctions correspondantes de la classe ADO

// RESERVATION PRODUITS
//création d'une reservation dans la base de données
public void nouvellereservation(HttpServletRequest req, HttpServletResponse rep){

try {
connexion();

Statement st = conn.createStatement();
st.executeQuery("INSERT INTO reservation(datedepart, dateretour, quantiteres, codesal, codetype, codeprod) values(curdate(), null, '"+req.getParameter("quantite")+"', 's002', '"+req.getParameter("codetype")+"', 'pc1');");
st.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//mise à jour du stock de produits due à la réservation
public void retirestock(HttpServletRequest req, HttpServletResponse rep) {

try {
connexion();
Statement stt;
stt = conn.createStatement();
stt.executeUpdate("UPDATE produit SET quantite=quantite-"+req.getParameter("quantite")+" WHERE code='pc1';");
stt.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//calcule si la quantite du stock est suffisante pour supporter la réservation
public int quantite (HttpServletRequest req, HttpServletResponse rep) throws SQLException, ClassNotFoundException{
connexion();
int max=0;
Statement st = conn.createStatement();
String type = req.getParameter("codetype");
ResultSet rs = st.executeQuery("SELECT SUM(quantite) FROM produit WHERE codetype ='"+type.toString()+"' GROUP BY codetype;");
if(rs.next()){
max = rs.getInt(1);
}
int z = Integer.parseInt(req.getParameter("quantite"));
max = max-z;
rs.close();
st.close();
return max;
}





Lorsque, dans mes pages web, je réserve un produit et que cette réservation remplie les critères, j'ai le message suivant : "Votre réservation a bien été effectuée." Donc ma réservation est censée avoir fonctionnée, mais quand je vérifie dans la base de données, il n'y a rien... Les fonctions "nouvelleréservation" et "retirestock" ne sont donc pas effectuée...

Je vous demande donc de m'aider à trouver pourquoi ces 2 fonctions sont oubliées par le programme ? Ca fait 2 jorus que je planche dessus...

PS : si des données sont entrées "en dur" dans les requête SQL, c'est normal
A voir également:

2 réponses

Problème résolu, ENFIN !

J'utilisais un excuteQuery à la place d'un executeUpdate pour faire mes requêtes...
0
je suis en stage de fin d'etude. mais rencontre des grd probleme sur mon projet en java. je m'explique.
1)j'ai besoin d'appeler plussieurs requete que je viens des creer dans un methode
public String naissances(){
String requete="SELECT sexe,count(*) as nombre FROM efesnew.citoyen where typedecla =1 and datedeclafr between datenaissfr and datecreation group by sexe";
String requete="SELECT sexe count(*) as nombre FROM efesnew.citoyen where typedecla=2 group by sexe and select sexe count(*) as nombres FROM efesnew.citoyen where typedecla=1 and datedeclafr between datenaissfr and datecreation group by sexe";
2)en outre je veux faire une conparaision des champ date. je veux recuperer l'année ou le mois dans une date et les compare avec une autre mois ou année puis aficher le resultat
voila un extrait de mon projet:

public class Naissance extends JFrame{
private String becId=null ;
private int mois =0;
private int annee;
private int periode;
private int[][] naissances ;
private int[][] naissParAgeMere;
private int[][] naissParRang;
private int[][] naissParResidence;
private Vector<Vector<String>> tabLignes;
private Vector<String> nomCols;

public Naissance() {
naissances= new int[3][2];
naissParAgeMere= new int[20][2];
naissParRang= new int[11][2];
naissParResidence= new int[0][2];
Naissance();
}

public void Naissance(){
naissances();

tabLignes=new Vector<Vector<String>>();
nomCols=new Vector<String>();
int i;
String requete=naissances();

//String requete="select * from efesnew.citoyen ";
// String requete="SELECT sexe,count(*) as nombre FROM efesnew.citoyen where typedecla=2 group by sexe";
//String requete="select * from efesnew.citoyen ";
try {
Class.forName( "com.mysql.jdbc.Driver" ).newInstance();

System.out.println(" Bravo,Pilote chargé avec sucess!");
}catch (Exception ex)
{System.out.println("Anomalie de chargement de votre pilote");
System.out.println(ex.getMessage());
}

try{// connexion à la base de donn�es
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost/efesnew","root","azerty" );

Statement statement = connection.createStatement();
ResultSet resultSet =statement.executeQuery(requete);

ResultSetMetaData md = resultSet.getMetaData();

nomCols = new Vector<String>();
for( i=1; i<=md.getColumnCount (); i++)
nomCols.add( md.getColumnLabel(i));

while( resultSet.next()) {

Vector<String> ligne=new Vector<String>();
for(i=1; i<=md.getColumnCount(); i++) {
String ch=resultSet.getString(i);
ligne.add(ch);
}
tabLignes.add(ligne);
}

statement.close();
connection.close();

}

catch ( SQLException sqlException ) {
System.out.println();
}
for(int j=0;j<nomCols.size();j++)
System.out.println(nomCols.elementAt(j));

JTable table=new JTable(tabLignes,nomCols);
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane, BorderLayout.CENTER);

//.add(table,BorderLayout.CENTER);

setVisible(true);
pack();

}
public String naissances(){
// dans cette methode je veux creer deux requetes et les appeler dans le fichier général
// cette methode et parail autres autre methode que je veux créer les requetes
// String requete="SELECT sexe,count(*) as nombre FROM efesnew.citoyen where typedecla =1 and datedeclafr between datenaissfr and datecreation group by sexe";
String requete="SELECT citoyenid,sexe,count(*) as nombre FROM efesnew.citoyen where typedecla=1 group by sexe";
/*
}
*/
return requete;
}
public static void main(String [] args)
{
new Naissance();
}
}
donc je pense que vous allez bien maider car la jue suis bloqué et je n'arrive pas avance
LESAVOIR NE VAUX QUE S'IL EST PARTAGE PARTOUT
0