# NullPointerException trotz getConnection



## Azador (12. Okt 2005)

Hallo allerseits!

Ich hab folgendes Problem bei meinen ersten Datenbankversuchen: Ich krieg eine NullPointerException

```
java.lang.NullPointerException

	at dbtest.main(dbtest.java:48)
```

Der Quellcode ist:


```
import java.sql.*;
import javax.swing.*;
import java.lang.*;
//import com.mysql.jdbc.Driver; <-- nötig?

public class dbtest
{

  final static String driver = "com.mysql.jdbc.Driver";
  final static String dburl = "jdbc:mysql://localhost/java_test";

  public static void main(String[] args)
    {

    Connection con = null;
    Statement stat = null;
    
    try
      {
      Class.forName(driver);
      con = DriverManager.getConnection(dburl,"root","");
      stat = con.createStatement();
      ResultSet rs = stat.executeQuery("SELECT Name FROM helden");

      JOptionPane.showMessageDialog( null, "Name: "+rs, "Ausgabe", JOptionPane.PLAIN_MESSAGE );
      while (rs.next())
        {
        JOptionPane.showMessageDialog(null,"Name: "+rs.getObject(1), "Ausgabe", JOptionPane.PLAIN_MESSAGE );
        }
      }
    catch (SQLException sqlException)
      {
      JOptionPane.showMessageDialog( null, "SQL Exception", "Ausgabe", JOptionPane.PLAIN_MESSAGE );
      sqlException.printStackTrace();
      System.exit(1);
      }
    catch (ClassNotFoundException classNotFound)
      {
      JOptionPane.showMessageDialog( null, "ClassNotFound Exception", "Ausgabe", JOptionPane.PLAIN_MESSAGE );
      classNotFound.printStackTrace();
      System.exit(1);
      }
    finally
      {
      JOptionPane.showMessageDialog( null, "Stat: " +stat+" Con: "+con, "Ausgabe", JOptionPane.PLAIN_MESSAGE ); //Test-Ausgabe
      try
        {
        stat.close();
        con.close();
        }
      catch (Exception exception)
        {
        exception.printStackTrace();
        System.exit(1);
        }
      }
    }
}
```

In meinem Beispielcode steht, dass man die Variablen stat und con erst mit *null* belegt. Bei der Testausgabe in Zeile 45 wird allerdings WIRKLICH ausgegeben stat: null und con: null - aber ich dachte ich habe die Variablen in den Zeilen 21/22 mit Objekten belegt. Wie können die noch null sein? Klar, dass ich eine stat Variable mit "null" drin nicht "closen" kann. Aber warum funktioniert die Belegung nicht?

Habe die Suchfunktion zwar benutzt und u.a. auch Themen zu einem ähnlichen(?) Problem gefunden, die Lösung aber nicht verstanden. Vielleicht versucht Ihr Euch nochmal an meinem Code. Wäre supernett, danke!

In Hoffnung auf Hilfe, Azador

[Edit:] Achja, und wie ist das? Muss ich den Treiber extra noch importieren (hier jetzt rauskommentiert). Wenn ja, wie? In meinem Projekt im JBuilder habe ich den Treiber als "benötigte Bibliothek" eingetragen. Reicht das?


----------



## KSG9|sebastian (12. Okt 2005)

1. poste mal den ganzen exception-trace (ex.printStackTrace())
2. ist der mysql-connector im classpath aufgenommen
3. wo bekommst du die NullPointerException ? Zeile 48 hilft mir nicht, da die Zeilennummern nicht stimmen ?


----------



## Bleiglanz (12. Okt 2005)

>>Aber warum funktioniert die Belegung nicht? 

Weil schon Class.forName eine Exception wirf!!


----------



## Azador (12. Okt 2005)

Erstmal vielen, vielen Dank für die rasche Antwort!

1. 





> C:\JBuilderX\jdk1.4\bin\javaw -classpath "H:\JavaProjects\dbtest\classes;C:\JBuilderX\mysql-connector-java-3.1.10\mysql-connector-java-3.1.10-bin-g.jar;C:\JBuilderX\mysql-connector-java-3.1.10\mysql-connector-java-3.1.10-bin.jar;C:\JBuilderX\jdk1.4\demo\jfc\Java2D\Java2Demo.jar;C:\JBuilderX\jdk1.4\demo\plugin\jfc\Java2D\Java2Demo.jar;C:\JBuilderX\jdk1.4\jre\javaws\javaws.jar;C:\JBuilderX\jdk1.4\jre\lib\charsets.jar;C:\JBuilderX\jdk1.4\jre\lib\ext\dnsns.jar;C:\JBuilderX\jdk1.4\jre\lib\ext\ldapsec.jar;C:\JBuilderX\jdk1.4\jre\lib\ext\localedata.jar;C:\JBuilderX\jdk1.4\jre\lib\ext\sunjce_provider.jar;C:\JBuilderX\jdk1.4\jre\lib\im\indicim.jar;C:\JBuilderX\jdk1.4\jre\lib\im\thaiim.jar;C:\JBuilderX\jdk1.4\jre\lib\jce.jar;C:\JBuilderX\jdk1.4\jre\lib\jsse.jar;C:\JBuilderX\jdk1.4\jre\lib\plugin.jar;C:\JBuilderX\jdk1.4\jre\lib\rt.jar;C:\JBuilderX\jdk1.4\jre\lib\sunrsasign.jar;C:\JBuilderX\jdk1.4\lib\dt.jar;C:\JBuilderX\jdk1.4\lib\htmlconverter.jar;C:\JBuilderX\jdk1.4\lib\tools.jar"  dbtest
> java.lang.NullPointerException
> 
> at dbtest.main(dbtest.java:48 )



so, das ist alles was von JBuilder ausgegeben wird. 

2. Muss der Connector noch manuell unter Systemsteuerung->System->Umgebungsvariablen etc. aufgenommen werden? Gilt das für JEDES Addon, das ich im Nachinein downloade und verwenden will?

3. Doch die Zeilennummern müssten eigentlich stimmen. Er kann die Variable stat nicht stat.close ausführen, weil da halt *null* drin steht.


----------



## Azador (12. Okt 2005)

Bleiglanz hat gesagt.:
			
		

> >>Aber warum funktioniert die Belegung nicht?
> 
> Weil schon Class.forName eine Exception wirf!!



Aha - und wie änder ich das - woran liegt das?  :?:


----------



## Bleiglanz (12. Okt 2005)

2) NEIN

woher kommt der Doppeleintrag?

C:\JBuilderX\mysql-connector-java-3.1.10\mysql-connector-java-3.1.10-bin-g.jar;
C:\JBuilderX\mysql-connector-java-3.1.10\mysql-connector-java-3.1.10-bin.jar;

import java.lang.*; // das ist quatsch

//import com.mysql.jdbc.Driver; <-- nötig? // nein unnötig!

und.

```
} catch (ClassNotFoundException classNotFound) {
            JOptionPane.showMessageDialog(null, "ClassNotFound Exception",
                    "Ausgabe", JOptionPane.PLAIN_MESSAGE);
            classNotFound.printStackTrace();
            System.exit(1);
```
sollte eigentlich ausgeführt werden???


----------



## Azador (12. Okt 2005)

Bleiglanz hat gesagt.:
			
		

> 2) NEIN


OK   



> woher kommt der Doppeleintrag?
> 
> C:\JBuilderX\mysql-connector-java-3.1.10\mysql-connector-java-3.1.10-bin-g.jar;
> C:\JBuilderX\mysql-connector-java-3.1.10\mysql-connector-java-3.1.10-bin.jar;



naja, in dem Archiv waren halt zwei .jar Dateien. Da dachte ich halt, doppelt gemoppelt hält besser  :lol: 
hab den Eintrag mit *bin-g.jar entfernt.



> import java.lang.*; // das ist quatsch


Sagst Du so! Ich hab mit dem blöden JBuilder zeitweise das Problem gehabt, dass er den Typ "String" nicht erkannt hat... naja, ich hab's rausgemacht und jetzt funzts es immer noch :wink:



> //import com.mysql.jdbc.Driver; <-- nötig? // nein unnötig!


ok, rausgelöscht.



> und.
> 
> ```
> } catch (ClassNotFoundException classNotFound) {
> ...


naja, das wurde nie aufgerufen irgendwie... keine Ahnung.

Aber das wichtigste: ES FUNKTIONIERT JETZT!!!
Leider versteh ich jetzt nicht, welcher Kommentar es war, den ich gelöscht hab, um es zum Laufen zu kriegen. Ich mache ja noch nicht lange Java - aber ich hab irgendwie so das Gefühl, dass die Fehlermeldungen irgendwie kaum mit dem Problem zusammenhängen oder nur über 15 Ecken.... Es ist ziemlich frustrierend wenn man meint nichts geändert zu haben und auf einmal klappts... naja egal. Vielleicht erkenn ich mehr, wenn ich mehr und mehr bei java durchsteig.

Vielen Dank!!!


----------

