# ResultSet - Wert überprüfen



## Guest (18. Apr 2006)

Hallo,

ich schreibe gerade ein Programm zur Datenverwaltung.
Mein Problem ist nun, dass beim Löschen eines vorhandenen Datensatzes auch dann gelöscht wird, wenn es die ID gar nicht gibt:



```
System.out.println("Löschen eines vorhandenen Datensatzes!");
            con = utils.getConnection();
            con.setAutoCommit(false);
            System.out.println("Bitte geben Sie die Kundennummer des Datensatzes ein, den Sie löschen möchten: ");
            String aknummer = stdin.readLine();
            String query = "select * from test where test_id = " + aknummer;
            System.out.println(query);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);


            if(rs == null)
               System.out.println("Die eingegebene Kundennummer ist nicht vorhanden!");
            else
	{
	    stmt.executeUpdate("Delete from test where test_id =" + aknummer);
                    con.commit();
	    System.out.println("Der Datensatz der Kundennummer " + aknummer + " wurde erfolgreich gelöscht!");
	}
```

Es wird also anhand einer eingegebenen Kundennummer ein Datensatz ausgelesen und dieser soll dann gelöscht werden. Ich dachte nun halt, dass wenn es die Kundennummer nicht gibt, das ResultSet NULL wäre?! Aber ist es anscheinend nicht, denn er springt immer in den else-Zweig, der if-Anweisung.
Wie kann ich das denn sonst abfangen?

Außerdem habe ich noch folgendes Problem:

Ich habe noch einen Teil, der einen vorhandenen Datensatz verändert - also ein Update!


```
System.out.println("Verändern eines bestehenden Datensatzes!");
            System.out.println("Bitte geben Sie eine Kundennummer und/oder einen Namen ein: ");
            String eingabe = stdin.readLine();

            System.out.println("Geben Sie einen neuen Vor- und Nachnamen ein: ");
            String name_neu = stdin.readLine();
            System.out.println("Geben Sie eine neue Stadt ein: ");
            String stadt_neu = stdin.readLine();
    			    	
            System.out.println("Geben Sie eine neue Postleitzahl ein: ");
            String plz_neu = stdin.readLine();
            System.out.println("Geben Sie eine neue Strasse ein: ");
            String strasse_neu = stdin.readLine();
            [color=red]Statement stmt = con.createStatement(); // Zeile 148[/color]
            stmt.executeUpdate("Update test set name='" + name_neu + "' ,stadt= '" + stadt_neu + "', plz=" + plz_neu + ", strasse= '" + strasse_neu + "' where test_id=" +eingabe);
            con.commit();
```

Ich lasse also eine Kundennummer oder auch einen Namen eingeben und der User muss dann aber auch alle Felder füllen, egal ob sie neu sind oder nicht (wusste nicht wie ich das sonst machen soll - also überpüfen welche Felder geändert wurden! Vielleicht hat auch hier jemand einen Tipp?!)
Wenn ich aber alle Felder ausgefüllt habe und Enter drücke, kommt folgende Meldung:

Exception in thread "main" java.lang.NullPointerException
	at stammdatenverwaltung.customer.main(test.java:148)
(Habe die betreffende Zeile gekennzeichnet!



Ich hoffe, ihr könnt  mir helfen?!

Danke schon mal


----------



## Murray (18. Apr 2006)

Statt 

```
if ( rs == null) {
```
könntest Du

```
if ( !rs.next()) {
```
verwenden.

//EDIT: Syntax-Fehler korrigiert


----------



## Gast (18. Apr 2006)

Super, das funktioniert. Danke 

Wenn jetzt jemand noch einen Rat zu dem anderen Problem hätte?!


----------



## Murray (18. Apr 2006)

In der von Dir gekennzeichneten Zeile kann eigentlich nur dann zu einer NullPointerException kommen, wenn das Objekt con nicht initialisiert worden ist.


----------



## Gast (18. Apr 2006)

Ok, danke - war wieder der Fehler.

Hätte da noch eine generelle Frage - wie macht man das denn bei einem UPDATE?!
Lässt man da alle Felder "neu" füllen, auch wenn der Benutzer die Werte nicht ändern will oder wie macht man sowas?


----------



## Murray (18. Apr 2006)

Ist m.E. vom konkreten Fall abhängig - hier schadet es wohl nichts, wenn man die Werte quasi mit sich selbst überschreibt.

Wenn man aber eine komplexere Anwendung hat, bei der die Datenbankoperationen aufwändiger sind (wenn das Update z.B. über mehrere gejointe Tabellen geht), dann kann es sich lohnen, vorab zu prüfen, welche Werte überhaupt angefasst werden müssen.


----------



## Gast (18. Apr 2006)

Alles klar, danke für deine Hilfe


----------

