Connexion à une base de données PostgreSQl à partir d'une SERVLET java

cs_power97 Messages postés 13 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 1 juin 2012 - 31 mai 2012 à 12:34
Pschh Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 1 juin 2012 - 1 juin 2012 à 11:45
Bonjour à tous
Je veux créer une application java web avec le SGBD postgreSQL. Pour ce faire:
- J'ai installé postgreSQL8
- J'ai également inclu le pilote postgresql.jar dans le lib du projet.
Voici le code de ma servlet
Quand je lance l'exécution de ma servlet voici l'erreur qui s'affiche sur ma console:

1 mai 2012 11:22:55 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet uploadfichier a généré une exception
java.lang.NullPointerException
at web.ServletUpload.doGet(ServletUpload.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Comment je peux contourner ça?
Merci

9 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
31 mai 2012 à 13:58
Salut,

Je déplace vers le forum java.

Peux tu nous donner le code java qui lève l'exception ?
0
cs_power97 Messages postés 13 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 1 juin 2012
31 mai 2012 à 14:37
voici le code java qui lève l'exception

package web;


import java.io.IOException;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class ServletUpload extends HttpServlet {

private Connection connexion=null;
private PreparedStatement instruction=null;
private String requete = "INSERT INTO Fichier (id, nom, chemin) VALUES (?,?,?)" ;

public void init() throws ServletException{
//String pilote = getInitParameter("jdbc.Driver");
String pilote="org.postgresql.Driver";
//String BaseDonnees = getInitParameter("localisation");
System.out.println("0: Je me connecte a la BD");
try{
System.out.println("1: Je me connecte12 a la BD");
System.out.println("pilotes= "+pilote);
Class.forName(pilote);
//Class.forName("com.postgresql.Driver");
System.out.println("2: Je me connecte a la BD");
Connection connexion=(Connection) DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgre");
instruction = connexion.prepareStatement(requete);
System.out.println("3: Je me connecte a la BD");
}
catch(ClassNotFoundException e){
System.out.println("DESOLE: Connexion impossible");
// log("Driver BD Non trouve");
//throw new ServletException();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public void doGet(HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
try{//System.out.println("3: Je suis dans la methode GET");
instruction.setString(1,(request.getParameter("numero")));
instruction.setString(2,request.getParameter("nom"));
instruction.setString(3,request.getParameter("chemin"));
instruction.executeUpdate();
request.setAttribute("reponse", "L'enregistrement s'est faite avec succes");
request.setAttribute("passe","Je suis satisfait");
try {
getServletContext().getRequestDispatcher("reponse.jsp").forward(request, response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch(SQLException e){ log("Personne non enregistre");

}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
doGet(request,response);
}

/*public void destroy(){
if(connexion !=null){
try {
connexion.close();
}
catch(SQLException e){
log("Erreur de fermeture de la BD");
}
}
}*/
}

Merci
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juin 2012 à 08:18
Déjà, tu gères très mal tes exceptions, commence par enlever les catch(ClassNotFoundException e).

Est ce que tu peux m'indiquer la ligne qui génere l'exception et utiliser les balises ?
0
cs_power97 Messages postés 13 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 1 juin 2012
1 juin 2012 à 08:50
Bonjour,
Voici la ligne qui génère l'erreur: Class.forName(pilote);
merci
0

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

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juin 2012 à 09:43
Tu as bien ajouté odbc ou équivalent dans ton classpath ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juin 2012 à 09:44
Je ne vois aucun import des classes d'un package d'accès à la base de données...
0
cs_power97 Messages postés 13 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 1 juin 2012
1 juin 2012 à 10:13
Quels sont import de package d'accès à la base de données?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 juin 2012 à 10:39
Pour une base oracle, tu as ce genre d'import à réaliser :

import oracle.jdbc.pool.OracleDataSource;

Dans ton cas, c'est un peu différent mais je ne vois pas d'import avec odbc ou jdbc. Je pense que tu n'as pas ajouté ce package à ton classpath et comme tu catch les ClassNotFoundException, tu ne vois pas l'erreur comme tu le devrais.
0
Pschh Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 1 juin 2012
1 juin 2012 à 11:45
Salut,

pas besoin d'import...
Il apparait que tu ne passes pas par la methode init() avant de faire le doGet et que tu fais "instruction.setString" sur instruction initialisée à null.
Essayes en début de methode doGet, qq chose comme ça:
if (instruction == null) init();
0
Rejoignez-nous