# Update funktioniert nicht



## Balian (11. Dez 2006)

Hallo Zusammen,

ich komme einfach nicht weiter und brauche Eure Hilfe. Ich bekomme beim Ausführen der Klasse eine Nullpointer Exception für die Updategeschicht. Ich macht bestimmt nur eine Kleinigkeit falsch.

Danke schon mal

Gruß

    Balian


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

public class Test {
	
	public static void main (String[] args) {
	
		try {
			Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
		}
		catch(ClassNotFoundException e) {
                                    e.printStackTrace();

		}
        		
		Connection con = null;
		Statement stmt = null;
		String odbc = "jdbc:odbc:testdb";
		
		try {
			
			con = DriverManager.getConnection(odbc,"benutzer","passwort");
			stmt = con.createStatement();
			
			String sqlquerytest = "select status From gruppe where gruppe_id in ( 2092 )";
			ResultSet rSettest = stmt.executeQuery(sqlquerytest);
			while(rSettest.next()) {
				System.out.println(rSettest.getString(1));
			}
			
									   
			String sqlupdate = "update gruppe set status = 'OK' where gruppe_id in ( 2092 )"; 
			int test = stmt.executeUpdate(sqlupdate);
							
			con.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
      
}
```


----------



## SlaterB (11. Dez 2006)

> Ich macht bestimmt nur eine Kleinigkeit falsch.

zunächst mal die Kleinigkeit, die NullPointerException auf ein bestimmtes Objekt zurückzuführen,
ich welcher Zeile tritt sie auf?

funktionieren irgendwelche anderen DB-Zugriffe oder fehlt gar der Treiber/ ist keine DB auf deinem Rechner installiert/ ..?

statt
 catch(ClassNotFoundException e) {

      } 

schreibe
 catch(ClassNotFoundException e) {
e.printStackTrace(); 
      }


----------



## Balian (11. Dez 2006)

Ups, tatsächlich da fehlt die Anweisung im ersten catch-Block.

Der Datenbankzugriff funktioniert. Zur Prüfung habe ich extra einmal einen select eingebaut, der den Wert des Feldes ausgibt. Das klappt, also steht die Datenbankverbindung. Nun wollte ich den Wert des Feldes auf Ok setzen lassen und da kommt die Exception. Also in Zeile 35.

Gruß

Balian


----------



## SlaterB (11. Dez 2006)

35 ist nun eine Leerzeile, die erste Möglichkeit danach wäre der Zugriff auf stmt,
ist das dort? prüfe mit 
System.out.println("stmt ist: "+stmt);
aber kann ja gar nicht sein wenn's vorher geklappt hat..

ist das eine NullPointerException weil eines der dort sichtbaren Objekte null ist? (welches)
oder tritt das z.B. intern in der executeUpdate()-Operation auf?

das sind die wichtigen Infos, die in der Fehlermeldung stehen

-------

vielleicht nochmal 
stmt = con.createStatement(); 
vor dem zweiten Kommando?


----------



## Gast (12. Dez 2006)

Also da habe ich wohl nochmal im Quellcode was angepasst.

Die Fehlermeldung wird für die Zeile 37


```
int test = stmt.executeUpdate(sqlupdate);
```

ausgeworfen.

Exception in thread "main" java.lang.NullPointerException - mehr wird nicht angezeigt.

System.out.println("stmt" + stmt);

gibt als Ergebnis 

stmtsun.jdbc.odbc.JdbcOdbcStatement@530daa

zurück.

Danke + Gruß

    Leif


----------



## SlaterB (12. Dez 2006)

tja, mir fällt nix sinnvolles mehr ein,
lasse wie gesagt mal die erste Anfrage weg oder erzeuge ein ganz neues Statement,

probiere einfachere updates wie

update gruppe set status = 'OK' 

update test set nummer = 1

aber das sind nur Strohhalme, einen Sinn kann ich da nicht erkennen,
hast du in deinem Programm irgendwo schon ein laufendes Update?

--------

kommt es NICHT zu einem Fehler wenn du alles so lässt und nur

int test = stmt.executeUpdate(sqlupdate);
nochmal durch
rSettest = stmt.executeQuery(sqlquerytest); 
ersetzt?

---------


verwende

main(){
try {
  // Inhalt von main 

}catch(Throwable t) {
t.printStackTrace();
}
}

um vielleicht mehr Informationen zur NullPointerException angezeigt zu bekommen


----------



## DaKo (12. Dez 2006)

nur Leserechte für die DB?!?


----------



## Balian (12. Dez 2006)

Hallo Zusammen,

ich habe heute nochmal Stück für Stück geschaut und siehe da, den Übertäter gefunden.

Ich hatte Testweise beim Update stmttest geschrieben, aber nicht stmttest = con.createStatement();  und dann konnte es bei mir nicht funktionieren.

Danke für Eure Hinweise, die ja schlußendlich zum Ziel geführt haben.

Gruß

    Balian


----------



## Guest (13. Dez 2006)

Eine etwas bessere Fehlerbehandlung wäre ebenfals sinnvoll.


----------

