Erreur sur requête sql dans prog java

Fermé
Nikko - 20 févr. 2008 à 14:08
 Nikko - 20 févr. 2008 à 15:25
Bonjour,

Je suis en train de créer un programme java avec une base de données MySql.

J'ai rédigé la fonction suivante :

public void sauver(Produit p) throws SQLException{
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/projet", "root", "mysql");
Statement statement = conn.createStatement();
statement.executeQuery("INSERT INTO produit(code, modele, quantite, codetype, marque) VALUES('"+req.getParameter("code")+"', '"+req.getParameter("modele")+"', "+req.getParameter("quantite")+", '"+req.getParameter("codetype")+"', '"+req.getParameter("marque")+"');");
conn.close();

}

Et j'obtiens une erreur de type NullPointerException.

==>java.lang.NullPointerException
Outils.ADO.sauver(ADO.java:33)
Action.ActionCreationProduit.traiter(ActionCreationProduit.java:34)
Controleur.Controleur.doPost(Controleur.java:22)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


la ligne "Action.ActionCreationProduit.traiter(ActionCreationProduit.java:34)" fait référence à la ligne 34 suivante :
ado.sauver(p1);

et voici ma méthode doPost qui se trouve dans ma classe Controleur :

public void doPost(HttpServletRequest req, HttpServletResponse rep)throws ServletException, IOException{
String invocation = req.getServletPath();
String action = invocation.substring(1,invocation.lastIndexOf("."));
FabriqueAction fabrique =new FabriqueAction();
Action varAction = (Action) fabrique.ActionFabrique(action);

try {
String nextPage;
nextPage = varAction.traiter(req, rep);

req.getRequestDispatcher(nextPage).forward(req,rep);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();}
}


J'ai vérifié la syntaxe de ma requête SQL plusieurs fois, et je n'ai pas vu d'erreur. Je ne vois vraiment pas d'où celà peut venir. J'en fais donc appel à vous. Je planche sur cette pu**** d'erreur depuis ce matin 9h30... J'ai vraiment besoin d'aide si je ne veux pas devenir fou !

Par avance, mille mercis !
Nikko

PS : je viens de m'apercevoir d'un "Warning" ==>Classpath entry C:/Program Files/Apache Software Foundation/Tomcat 6.0/lib/servlet-api.jar will not be exported or published. Runtime ClassNotFoundExceptions may result.
A voir également:

10 réponses

frangipane44 Messages postés 70 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 11 octobre 2012 2
20 févr. 2008 à 14:17
Bonjour,

et il y a quoi comme instruction à la ligne 33 de la classe ADO (Outils.ADO.sauver(ADO.java:33) ) ?
0
Bonjour Frangipane44.

A la ligne 33 se trouve ma requête SQL
0
A savoir : statement.executeQuery("INSERT INTO produit(code, modele, quantite, codetype, marque) VALUES('"+req.getParameter("code")+"', '"+req.getParameter("modele")+"', "+req.getParameter("quantite")+", '"+req.getParameter("codetype")+"', '"+req.getParameter("marque")+"');");
0
Ne penses-tu pas que le NullPointerExceptions pourrait venir du Warning que j'ai mis en PS dans mon premier post ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
frangipane44 Messages postés 70 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 11 octobre 2012 2
20 févr. 2008 à 14:50
Pour le warning je pense pas que ça vienne de là. ça indique juste que tu ne pourras pas exporter le servlet-api.jar quand tu créeras ton war (ou ton jar ou ton...). Il ne sera pas dedans.

Essaye de passer en mode debug pour voir ce qui est null dans ton code.

Mais il semble, si c'est à la ligne 33, que le problème vienne soit du "statement" qui est null, ça serait bizarre, conn devrait être null avant...OU ALORS c'est ton req qui est null...

Tu le récupères où le req dans la méthode sauver? C'est une variable globale? J'espère pas...Faudrait que tu passes le HttpServletRequest à ta méthode "sauver" ainsi que le HttpServletResponse
0
Je ne sais pas utiliser le mode debug. Je débute dans java.

Ca doit sûrement être le req qui est null puisqu'avant de poster, j'avais une erreur qui portait sur la ligne suivante :

Statement statement = conn.createStatement();


J'ai donc pensé que le conn était null donc je lui ai attribué une valeur via la ligne :

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/projet", "root", "mysql");

Le req de la méthode sauver est une variable private.

donc d'apèrs toi, j'ajoute en paramètre à ma méthode sauver les HttpServletRequest/HttpServletResponse en plus du produit ?
0
frangipane44 Messages postés 70 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 11 octobre 2012 2
20 févr. 2008 à 15:10
"donc d'apèrs toi, j'ajoute en paramètre à ma méthode sauver les HttpServletRequest/HttpServletResponse en plus du produit ?"

-> Oui, ou alors tu passes en paramètre : le code, le modele, la quantite, le codetype et la marque.
Au choix, je sais pas lequel est le mieux
0
En ajoutant le HttpServletRequest/HttpServletResponse à ma fonction sauver, il ne met mets plus d'erreur quand je créé un produit via mes pages JSP. Mais il ne m'affiche pas la page "résultat" qui est censé s'afficher. Au lieu de celà, il me met une page blanche.

Ca n'a pas d'importance que mon servlet-api.jar ne soit pas exporter dans mon war quand j'exporte et réimporte le tout dans Apache Tomcat ?
0
frangipane44 Messages postés 70 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 11 octobre 2012 2
20 févr. 2008 à 15:25
Si, c'est peut-être le problème...mais là il faudrait quelqu'un de plus compétent que moi.
Il semblerait que ce soit à Apache plutôt de spécifier le jar :
Source : https://www.developpez.net/forums/d420264/java/developpement-web-java/servlets-jsp/classpath-entry-will-not-be-exported-or-published/
0
Merci beaucoup
0