Update funktioniert nicht

Status
Nicht offen für weitere Antworten.

Balian

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

Code:
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();
		}
	}
      
}
 
> 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();
}
 
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
 
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?
 
Also da habe ich wohl nochmal im Quellcode was angepasst.

Die Fehlermeldung wird für die Zeile 37

Code:
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
 
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
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben