# java.lang.NullPointerException



## Hannes23 (5. Okt 2005)

Hallo,

ich habe zwei .java Dateien: In der einen befindet sich das Hauptprogramm:

Datei mvtest.java

```
public class mvtest
{

  public static void main( String[] args )
  {
    String DbUrl;
    DbUrl = "jdbc:mysql://localhost:3306/test" ;
    db meineDatenbank; 
    db.opendb (DbUrl);
   }   
}
```

und in der anderen die Datenbankanbindung:


Datei db.java

```
import java.io.*;
import java.sql.*;

public class db
  {

  public static void opendb(String DbUrl)
    {
    String treiber=null;

     try {
	 Class.forName( treiber ).newInstance();
         Connection cn = DriverManager.getConnection( DbUrl, "hannes", "123" );
         BufferedReader in = new BufferedReader(
                             new InputStreamReader( System.in ) );
        String frage = null ;
	    
        cn.close();
        } catch( Exception ex ) {   System.out.println( ex );   } 
   }
}
```

Wenn ich jetzt die Datei mit der main über


```
java -cp .:/home/hannes/java/mysql-connector-java-3.1.10-bin.jar mvtest
```

aufrufe, bekomme ich die Fehlermeldung


```
java.lang.NullPointerException
```

In der Referenz steht: "Die NullPointerException wird ausgelöst, wenn versucht wird, über einen Verweis, der den Wert null hat, ein Datenelement, eine Methode oder ein Array-Element anzusprechen." ... kann mir aber nicht vorstellen, wo das hier zutreffen könnte.

Kann mir da jemand weiterhelfen?

Danke, Hannes

Umgebung:
SuSE Linux 9.2
MySQL Connector/J 3.1.10
MySQL 4.0.21
Java version "1.4.2_08"[/i]


----------



## Mag1c (6. Okt 2005)

Moin,

1.) in mvtest Zeile 9 legst du die Variable meineDatenbank vom Typ db an (kein Objekt; die Variable ist null). In Zeile 10 rufst du über die Variable eine Methode auf. Hier knallts, da kein Objekt existiert. Wenn du die static Methode aufrufen willst, machst du das über den Klassennamen (db. opendb(...)).

2.) Laß Klassen mit einem großen Buchstaben beginnen.

3.) In der Klasse db Zeile 10 hast du eine String-Variable mit null belegt. In Zeile 13 versuchst du über eine Klassen-Instanz daraus ein Objekt zu erzeugen. Hier wird es definitiv auch knallen.

Gruß
Mag1c


----------



## Hannes23 (6. Okt 2005)

Mag1c hat gesagt.:
			
		

> 1.) in mvtest Zeile 9 legst du die Variable meineDatenbank vom Typ db an (kein Objekt; die Variable ist null). In Zeile 10 rufst du über die Variable eine Methode auf. Hier knallts, da kein Objekt existiert. Wenn du die static Methode aufrufen willst, machst du das über den Klassennamen (db. opendb(...)).



Da komm ich jetzt nicht ganz mit - meineDatenbank ist doch eben gerade ein Objekt der Klasse db, oder nicht? Wie müsste das sonst heißen?



			
				Mag1c hat gesagt.:
			
		

> 2.) Laß Klassen mit einem großen Buchstaben beginnen.



ahja, hast recht!


----------



## Roar (6. Okt 2005)

Hannes23 hat gesagt.:
			
		

> Mag1c hat gesagt.:
> 
> 
> 
> ...


nö, meineDatenbank ist kein objekt, das ist gar nichts: null
aber das ist auch nich der fehler, sondern nur sinnlos @Mag1c: er ruft ja über db.opendb() auf...

warum schaust du nicht einfach in den stacktrace der exception, dann wüsstest du schon längst wo der fehler auftritt, und auch sogar ziemlich eindeutig:

    String treiber=null;
    Class.forName( treiber ).newInstance(); 

:autsch:


----------



## Hannes23 (6. Okt 2005)

Roar hat gesagt.:
			
		

> String treiber=null;
> Class.forName( treiber ).newInstance();
> 
> :autsch:



Komisch - was stimmt daran nicht? Wie müsste das sonst heißen? Sorry, sitz wohl grad auf dem Schlauch...
Bevor ich aus der Datenbank-Anbindung eine Klasse gemacht hab, ist die Verbindung mit dieser Code-Stelle oben auch gelaufen...


----------



## Roar (6. Okt 2005)

Hannes23 hat gesagt.:
			
		

> Roar hat gesagt.:
> 
> 
> 
> ...


äh, was daran nich stimmt? Class.forName(null) <- was soll das zurückliefern? null natürlich, darum fliegt dir da ne nullpointer  wie wärs wenn du treiber mal einen wert zuweisen würdest?


----------



## Mag1c (7. Okt 2005)

Moin,

schau doch mal in die F.A.Q.. Dort ist erklärt, wie man eine Verbindung zu MySQL aufbaut.

Gruß
Mag1c


----------



## Hannes23 (7. Okt 2005)

oh Mann - ich hab mal zu Testzwecken einen Kommentar vor der Zeile gehabt, in der der Treiber zugewiesen wird. Klar dass es nicht geht wenn da null drin steht - sorry!! Jetzt funktionierts

Trotzdem vielen Dank


----------

