# Nullpointer Exception bei Zugriff auf Datenbank



## jim_panse (27. Aug 2009)

heyho!

hab ein servlet das werte in einer datenbank abfragen soll hier mal der code:


```
System.out.println("SHOWINFOSERVLET");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String department = request.getParameter("department");
        System.out.println("Department: " + department);
        
        MySQLTranslator msql = new MySQLTranslator();
        ResultSet rs = null;
        String sqlShInfo = "SELECT * FROM department where attribute = '" + department + "'";

        String attribute = "-";
        String name = "-";
        String info = "-";

        try {
            System.out.println("Verbinde mit Datenbank...");
            msql.connect(ConfigClass.MYSQLHOST, ConfigClass.MYSQLUSER, ConfigClass.MYSQLPASSWORD, ConfigClass.MYSQLSCHEMA);
            System.out.println("1");
            rs = msql.writeSELECTQuery(sqlShInfo);
            System.out.println("2 rs:" +rs);       //bis hier dann kommt der fehler
            while (rs.next() == true) {
                System.out.println("3");
                attribute = rs.getString("attribute");
                System.out.println("4 attribute:" + attribute);
                name = rs.getString("name");
                System.out.println("5 name:" + name);
                info = rs.getString("info");
                System.out.println("6 info:" + info);
            }

            msql.deConnect();

        } catch (Exception ex) {
            System.out.println("Fehler 1");
            out.println("<div class='headerr'>Fehlermeldung:</div>");
            out.println("<div class='bodyerr'>* Datenbankfehler:" + msql.errMSG + "</div>");
        }
```

leider bekomme ich beim ausführen des servlets immer eine null pointer exception

wie ihr sehen könnt hab ich auch fleißig system.outs reingepackt um nachzusehen, wo die exception geworfen wird.

hier noch die ausgabe:


```
SHOWINFOSERVLET
Department: LKH
Verbinde mit Datenbank...
1
2 rs:null
Fehler 1
```

komisch daran ist das ein selectquery ausgeführt wird der die werte im resultset rs speichern sollte, jedoch steht in rs nur null. wenn ich jetz aber in meine datenbank geh und die query von hand ausführe, werden schon werte im ergebnisfenster angezeigt. verwirrt mich ein bisschen. an was könnte das liegen? verbindungsprobleme?

m.f.g


----------



## ARadauer (27. Aug 2009)

MySQLTranslator was is das?

hier läuft was falsch.. rs = msql.writeSELECTQuery(sqlShInfo); das gibt dir null zurück...


----------



## jim_panse (27. Aug 2009)

Mysqltranslator is eine klasse in der ein paar methoden drin stehn 

zum connecten, deconnecten, write, update und so weiter...


----------



## SlaterB (27. Aug 2009)

offensichtlich arbeitet writeSELECTQuery nicht korrekt, wenn es null zurückgibt, das aber nicht sein soll,
wie kannst du gleichzeitig jemanden fragen warum das so ist, aber den Code dieser Methode nicht posten/ selber anschauen/ loggen?

das passt doch nicht zusammen


----------



## jim_panse (27. Aug 2009)

hier der code der methode:


```
public ResultSet writeSELECTQuery(String writeSELECTCommand) {
        Statement sm = null;    //Anlegen des Statements
        ResultSet rs = null;    //Anlehen des ResultSets

        try {
            //Updatetable zum ändern der Datenbank
            sm = (Statement) conn.createStatement(ResultSet.CONCUR_READ_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE);
            //Ausführen des gewünschten Queries
            rs = sm.executeQuery(writeSELECTCommand);
            return rs;
        } catch (Exception e) {
            errMSG = e.toString();
            return null;
        }
    }
```


----------



## SlaterB (27. Aug 2009)

ich sehe da eine Möglichkeit für return null;
wie wär es, diese genauer zu untersuchen, z.B. die Exception anzuschauen


----------



## ARadauer (27. Aug 2009)

```
e.printStackTrace();
```
in die Zeile 12 und wir werden schlauer....



> Mysqltranslator is eine klasse in der ein paar methoden drin stehn


aha


----------



## jim_panse (27. Aug 2009)

kk hab ich gemacht, das kommt dabei raus 


```
Department: LKH
Verbinde mit Datenbank...
1
java.lang.NullPointerException
        at mysqlcon.MySQLTranslator.writeSELECTQuery(MySQLTranslator.java:73)
        at information.ShowInfoServlet.processRequest(ShowInfoServlet.java:44)
        at information.ShowInfoServlet.doGet(ShowInfoServlet.java:94)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
        at org.apache.jsp.restricted.index_jsp._jspService(index_jsp.java:793)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        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:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        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:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
2 rs:null
Fehler 1
```


----------



## ARadauer (27. Aug 2009)

poste mal bitte die gesamte MySQLTranslator.. in Zeile 73 ist irgendwas null


----------



## jim_panse (27. Aug 2009)

```
package mysqlcon;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author 
 */
public class MySQLTranslator {

    //Attribute
    private Driver mySqlDriver;     //JDBC-Driver
    public Connection conn;         //Connection
    public boolean isOK = false;    //Verbindungsstatus
    public String errMSG = "";      //ErrorMassage
    
    public MySQLTranslator() {
    }
        
    //Hilfsmethode zum Aufbauen der Verbindung
    public void connect(String host, String user, String pswd, String shema) {
        try {
            //JDBC-Driver laden
            mySqlDriver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();
            //Registrieren des DB-Drivers
            DriverManager.registerDriver(mySqlDriver);
        } catch (ClassNotFoundException cnfe) {
            errMSG = cnfe.toString();
        } catch (IllegalAccessException iae) {
            errMSG = iae.toString();
        } catch (InstantiationException ie) {
            errMSG = ie.toString();
        } catch (SQLException se) {
            errMSG = se.toString();
        }

        try {
            //Aufbauen der Verbindung (Connection) mit den erforderlichen Benutzer- und Datenbankangaben
            conn = (Connection) DriverManager.getConnection("jdbc:mysql://" + host + "/" + shema, user, pswd);
            //isOK wird auf true gesetzt, wenn Verbindung hergestellt wurde
            isOK = true;
        } catch (SQLException se) {
            errMSG = se.toString();
            isOK = false;
        }

    }

    //Hilfsmethode zum schließen der Verbindung
    public void deConnect() {
        try {
            //Schließen bzw. Beenden der Verbindung (Connection)
            conn.close();
            //isOK wird auf false gesetzt um zu zeigen, dass die Verbindung geschlossen ist
            isOK = false;
        } catch (SQLException se) {
            errMSG = se.toString();
        }
    }

    //Hilfsmethode zum Ausführen eines SELECT-Query
    public ResultSet writeSELECTQuery(String writeSELECTCommand) {
        Statement sm = null;    //Anlegen des Statements
        ResultSet rs = null;    //Anlehen des ResultSets

        try {
            //Updatetable zum ändern der Datenbank
            sm = (Statement) conn.createStatement(ResultSet.CONCUR_READ_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE);
            //Ausführen des gewünschten Queries
            rs = sm.executeQuery(writeSELECTCommand);
            return rs;
        } catch (Exception e) {
            errMSG = e.toString();
            e.printStackTrace();
            return null;
        }
    }
    
    //Hilfsmethode zum Ausführen eines Update-Query
    public int writeUPDATEQuery(String writeUPDATECommand) {
        Statement sm = null;    //Anlegen des Statements
        int count = -1;         //Anzahl der Werte

        try {
            //Updatetable zum ändern der Datenbank
            sm = (Statement) conn.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE);
            //Ausführen des gewünschten Queries
            count = sm.executeUpdate(writeUPDATECommand);
            return count;
        } catch (Exception e) {
            errMSG = e.toString();
            return -1;
        }
    }
    
    //Hilfsmethode zum Ausführen eines Insert-Query
    public int writeINSERTQuery(String writeINSERTCommand) {
        Statement sm = null;    //Anlegen des Statements
        int count = -1;         //Anzahl der Werte

        try {
            //Updatetable zum ändern der Datenbank
            sm = (Statement) conn.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE);
            //Ausführen des gewünschten Queries
            count = sm.executeUpdate(writeINSERTCommand);
            return count;
        } catch (Exception e) {
            errMSG = e.toString();
            return -1;
        }
    }

    public boolean getStatus() {
        return isOK;
    }
    
    public String getErrorMassage() {
        return errMSG;
    }
}
```


----------



## ARadauer (27. Aug 2009)

```
} catch (SQLException se) {
            errMSG = se.toString();
            isOK = false;
        }
```
wer lernt euch sowas? wenn du nachher nichit auf isOk überprüfst merkst du gar nicht, dass ein fehler passiert ist....

bei allen 
	
	
	
	





```
} catch (Exception e) {
```
machst du jetzt mal ein             e.printStackTrace(); rein... damit wir sehen wo der fehler wirklich passiert...

oder wirf die exception weiter und fang sie beim Aufruf...


----------



## jim_panse (27. Aug 2009)

o.k ich glaub da stimmt was mit der verbindung auch nicht oder?


```
Department: LKH
Verbinde mit Datenbank...
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:812)
        at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3269)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1182)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:2670)
        at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at mysqlcon.MySQLTranslator.connect(MySQLTranslator.java:44)
        at information.ShowInfoServlet.processRequest(ShowInfoServlet.java:42)
        at information.ShowInfoServlet.doGet(ShowInfoServlet.java:94)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
        at org.apache.jsp.restricted.index_jsp._jspService(index_jsp.java:793)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        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:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        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:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
1
java.lang.NullPointerException
        at mysqlcon.MySQLTranslator.writeSELECTQuery(MySQLTranslator.java:75)
        at information.ShowInfoServlet.processRequest(ShowInfoServlet.java:44)
        at information.ShowInfoServlet.doGet(ShowInfoServlet.java:94)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
        at org.apache.jsp.restricted.index_jsp._jspService(index_jsp.java:793)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        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:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        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:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
2 rs:null
Fehler 1
```


----------



## SlaterB (27. Aug 2009)

genau, und deshalb ist conn null, daher die zweite Exception

(wie du grundsätzlich auf die Datenbank zugreifen musst kann ich nicht korrigieren, 
die Fehlermeldung klingt nach falschem Passwort)


----------



## jim_panse (27. Aug 2009)

o.k das mit dem passwort hab ich schon vor 10 minuten geändert... die änderungen traten aber anscheinend erst jetz in kraft. tomcat ist halt manchmal ein bisschen langsam beim übernehmen...

danke für eure hilfe


----------

