# Harte Nuss



## Guest (27. Dez 2003)

Ich habe ein (glaube ich) schwerwiegendes Problem. Ich lese ganz normal datensätze aus einer DB aus.
Das mache ich so:

Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(host + db, user, pw);
stmt = conn.createStatement();

sql = "SELECT id, status, vorname, nachname, adresse, " + 
        "plz, ort, telefon, email, benutzer, passwort, datum, " + 
        "news FROM benutzer";

entries = stmt.executeQuery(sql);

benutzerDat[0].add(new Integer(entries.getInt("id")));
benutzerDat[1].add(entries.getString("status"));
benutzerDat[2].add(entries.getString("vorname"));
benutzerDat[3].add(entries.getString("nachname"));
benutzerDat[4].add(entries.getString("adresse"));
benutzerDat[5].add(entries.getString("plz"));
benutzerDat[6].add(entries.getString("ort"));
benutzerDat[7].add(entries.getString("telefon"));
benutzerDat[8].add(entries.getString("email"));
benutzerDat[9].add(entries.getString("benutzer"));
benutzerDat[10].add(entries.getString("passwort"));
benutzerDat[11].add(entries.getString("datum"));
benutzerDat[12].add(new Integer(entries.getInt("news")));

Mein Problem ist nun, dass ich zwar ohne Probleme zur DB connecten kann, aber ich die Daten nicht erhalte, resp. einen NullPointer erhalte.
An was könnte das liegen?

Viele grüsse
Michael Schuler


----------



## mariopetr (27. Dez 2003)

entries sollte vom type ResultSet sein und muss nach dem stmt.executeQuery(); mit entries.next() auf den ersten datensatz gesetzt werden. das array benutzerDat muss mit einer laenge >0 instanziiert werden


----------



## michaelschuler (27. Dez 2003)

entries ist ein ResultSet

das entries.next ist in der schleife:

while (entries.next) {
    benutzerDat[0].add(new Integer(entries.getInt("id"))); 
    benutzerDat[1].add(entries.getString("status")); 
    benutzerDat[2].add(entries.getString("vorname")); 
    benutzerDat[3].add(entries.getString("nachname")); 
    .......
    .......
}

die erste nullPointer erhalte ich hier:
*entries = stmt.executeQuery(sql);*

mein sql statement sollte aber funktionieren, im phpMyAdmin funktioniert mein Statement!


----------



## mariopetr (27. Dez 2003)

wenn dein erster code complet ist (benutze mal code tags) liefert der connectionmanager keine connection zurueck. dann sollte aber eigentlich eine exception geworfen werden. da musst du wohl mal reindebuggen


----------



## michaelschuler (27. Dez 2003)

```
public ArrayList[] getUser() {
		flagDownload = false;
		sql = "SELECT id, status, vorname, nachname, adresse, " + 
			  "plz, ort, telefon, email, benutzer, passwort, datum, " + 
			  "news FROM benutzer";
		
		try {
			entries = stmt.executeQuery(sql);
			anz = 0;
			while(entries.next()) {
				benutzerDat[0].add(new Integer(entries.getInt("id")));
				benutzerDat[1].add(entries.getString("status"));
				benutzerDat[2].add(entries.getString("vorname"));
				benutzerDat[3].add(entries.getString("nachname"));
				benutzerDat[4].add(entries.getString("adresse"));
				benutzerDat[5].add(entries.getString("plz"));
				benutzerDat[6].add(entries.getString("ort"));
				benutzerDat[7].add(entries.getString("telefon"));
				benutzerDat[8].add(entries.getString("email"));
				benutzerDat[9].add(entries.getString("benutzer"));
				benutzerDat[10].add(entries.getString("passwort"));
				benutzerDat[11].add(entries.getString("datum"));
				benutzerDat[12].add(new Integer(entries.getInt("news")));
				anz++;
				System.out.println(anz);
			}
			flagDownload = true;
		} catch (SQLException t) {
			System.out.println("Execute: " + t);
			flagDownload = false;
		} catch (NullPointerException n) {
			System.out.println("Execute: " + n);
			flagDownload = false;
		}
		return benutzerDat;
	}
```

Ich erhalte meine Exception wirklich erst bei entries = stmt.executeQuery(sql);![/code]


----------



## AlArenal (27. Dez 2003)

Was für eine Exception denn überhaupt?

Sicher, dass der Connect zur DB funzt?


----------



## michaelschuler (27. Dez 2003)

Also der Debugger wirft hier die NullPointerException:


```
benutzerDat[0].add(new Integer(entries.getInt("id")));
```

Ja, die Connection funktioniert.
Komisch ist auch, dass nur das select nicht geht, insert funktioniert...


----------



## mariopetr (27. Dez 2003)

dann ist das array oder die eintraege nicht instanziiert worden (wie ich im ersten post schon bemerkte), oder das reultset ist null, was ich nicht glaube. setzte mal vor die schleife ein 

```
<datentyp>[] benutzerDat=new <datentyp>[100]
```
zudem muss (so wie du das array benutzt) jeder eintrag in dem array schon existieren

```
for (int i=0; i<benutzerDat.legth; i++)
	benutzerDat[i]=new <datentyp>();
```


----------



## michaelschuler (27. Dez 2003)

```
private ArrayList[] benutzerDat = new ArrayList[13];
```
es ist also ein Array einer ArrayList.


----------



## mariopetr (27. Dez 2003)

mag sein. dann ist dein code:

```
entries = stmt.executeQuery(sql); 
         anz = 0; 
         while(entries.next()) { 
            benutzerDat[0].add(new Integer(entries.getInt("id"))); 
            benutzerDat[1].add(entries.getString("status"));
```

aber grundlegend falsch.
mit einer arraylist kann man so (list[index]) nicht zugreifen. zudem muessen trotzdem alle elemente deiner liste inizialisiert sein, da du direkt darauf zugreifst. versuche mal (nur beispielcode)

```
List list=new ArrayList();
while(resultset.next())
{
	Data data=new Data();
	data.field1=resultset.get("field1");
	data.field2=resultset.get("field2");
	..
	..
	list.add(data);
}
```


----------

