Newsgroup: it.comp.java
Titolo: NullPointerException eseguendo una query da servlet

Ciao a tutti,
premetto che sono nuovissimo nell'ambito dello sviluppo J2EE.
Ho creato una piccola servlet che ha il compito di effettuare delle query ad 
un database creato con mysql (ho seguito uno degli esempi che riporta il 
libro "Java - tecniche avanzate di programmazione" di Deitel&Deitel)
Il metodo init termina correttamente:
----------------
public void init(ServletConfig config) throws ServletException {
    System.setProperty("db2j.system.home", 
config.getInitParameter("databaseLocation")); //non capisco cosa vuol dire 
questa riga!
    try {
        Class.forName(config.getInitParameter("databaseDriver"));
        connection = 
DriverManager.getConnection(config.getInitParameter("databaseName"));
        statement = connection.createStatement();
    }
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
}
-----------------
i parametri sono forniti dal seguente file web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
" 
xmlns="
http://java.sun.com/xml/ns/javaee
" 
xmlns:web="
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
" 
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
" id="WebApp_ID" 
version="2.5">
  <display-name>Multilevel</display-name>
  <welcome-file-list>
    <welcome-file>survey.html</welcome-file>
    </welcome-file-list>
  <servlet>
    <description>Sondaggio su web che si collega ad un DB</description>
    <display-name>SurveyServlet</display-name>
    <servlet-name>SurveyServlet</servlet-name>
    <servlet-class>SurveyServlet</servlet-class>
    <init-param>
     <param-name>databaseDriver</param-name>
     <param-value>com.mysql.jdbc.Driver</param-value>
    </init-param>
    <init-param>
     <param-name>databaseName</param-name>
     <param-value>jdbc:mysql://localhost:3306/animalsurvey</param-value>
    </init-param>
    <init-param>
     <param-name>databaseLocation</param-name>
     <param-value>jdbc:mysql://localhost:3306/</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SurveyServlet</servlet-name>
    <url-pattern>/SurveyServlet</url-pattern>
  </servlet-mapping>
</web-app>
---------------------
Il problema è nel metodo doPost() quando eseguo la query.
query = "UPDATE surveyresults SET votes = votes + 1 " +"WHERE id = " + 
value;
statement.executeUpdate( query );
la chiamata a executeUpdate() scatena il seguente errore in Tomcat:
----------
type Exception report
description The server encountered an internal error () that prevented it 
from fulfilling this request.
exception
java.lang.NullPointerException
 SurveyServlet.doPost(SurveyServlet.java:85) <---cioè la chiamata 
executeUpdate
 javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache 
Tomcat/6.0.18 logs.
--------
Ho provato ad eseguire la query con un editor SQL e va tutto bene.
Come posso, quindi, risolvere il problema?
Grazie mille anticipatamente e scusate l'eventuale banalità dell'errore

nella riga 85 chiami il metodo executeUpdate.
Tale metodo lo richiami da una preparedStatement o CallableStatement o
comunque da qualche classe che implementa java.sql.Statement.
Bene tale oggetto Statement è nullo per cui non puoi chiamare
executeUpdate.
Quindi il problema è da ricercare sull'inizializzazione di Statement.
riguardo il metodo getInitParameter che commenti con "non capisco cosa
vuol dire
questa riga!" esso è il metodo che consente di estrarre dei valori
inseriti nel file web.xml relativamente a quella servlet.
------
Articoli ed Esempi su
[Java EE, Hibernate, EJB, Servlet, JSP, WebService, Glassfish, Java ME
etc]
http://programmaremobile.blogspot.com

inseriti nel file web.xml relativamente a quella servlet.
Grazie mille per il tuo aiuto!

Prova a vedere con il debugger (o in alternativa con un
System.out.println)
1) se prima di chiamare executeUpdate statement è diverso da null
2) se il codice di init viene eseguito


2) se il codice di init viene eseguito
ho risolto: l'unico problema era relativo alla connessione (che comportava 
uno statement nullo).
Non specificavo user e password per l'accesso al db :-(
Grazie, comunque, per il tempo che mi hai dedicato :-)
