Harte Nuss

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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

Bekanntes Mitglied
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
 
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

Bekanntes Mitglied
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
 
Code:
	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]
 
Also der Debugger wirft hier die NullPointerException:

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

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

mariopetr

Bekanntes Mitglied
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
Code:
<datentyp>[] benutzerDat=new <datentyp>[100]
zudem muss (so wie du das array benutzt) jeder eintrag in dem array schon existieren
Code:
for (int i=0; i<benutzerDat.legth; i++)
	benutzerDat[i]=new <datentyp>();
 

mariopetr

Bekanntes Mitglied
mag sein. dann ist dein code:
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)
Code:
List list=new ArrayList();
while(resultset.next())
{
	Data data=new Data();
	data.field1=resultset.get("field1");
	data.field2=resultset.get("field2");
	..
	..
	list.add(data);
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben