ResultSet - Wert überprüfen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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:


Code:
            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!

Code:
            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

Top Contributor
Statt
Code:
if ( rs == null) {
könntest Du
Code:
if ( !rs.next()) {
verwenden.

//EDIT: Syntax-Fehler korrigiert
 
G

Gast

Gast
Super, das funktioniert. Danke :)

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

Murray

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

Gast

Gast
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

Top Contributor
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Funktion um einen Wert in einem ResultSet zu finden ? Datenbankprogrammierung 5
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
Z ResultSet ist null warum? Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
C PostgreSQL ResultSet.TYPE_SCROLL_SENSITIVE setzen Datenbankprogrammierung 2
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L Zugriff auf ein Resultset Datenbankprogrammierung 7
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
D Resultset schließen ?? Datenbankprogrammierung 5
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
L ResultSet Datenbankprogrammierung 1
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
D MySQL ResultSet als Stream weiter geben Datenbankprogrammierung 9
M ResultSet Cachen Datenbankprogrammierung 3
R ResultSet mit "Untertabellen" Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R Resultset.last() Problem Datenbankprogrammierung 12
PaulG Leeres ResultSet initialisieren Datenbankprogrammierung 6
J Frage zu ResultSet Datenbankprogrammierung 3
J SQL ResultSet Previous Datenbankprogrammierung 10
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
H PostgreSQL Objekte aus ResultSet Datenbankprogrammierung 5
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
O Oracle Resultset greift auf Spaltenüberschriften zu Datenbankprogrammierung 2
Kenan89 Wieso klappt das ResultSet nicht? Datenbankprogrammierung 3
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
F Derby/JavaDB Resultset in JTablemodel Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
B SQLite ResultSet is TYPE_FORWARD_ONLY Datenbankprogrammierung 5
T Exception ResultSet Datenbankprogrammierung 7
0 ResultSet in JTable Datenbankprogrammierung 14
S [SQL] ResultSet Datenbankprogrammierung 4
R ResultSet Datenbankprogrammierung 4
I Sonderbehandlung wenn ResultSet leer ist Datenbankprogrammierung 9
I Problem mit ResultSet Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
R Detached ResultSet Datenbankprogrammierung 3
F generelle Vorgehensweise ResultSet Datenbankprogrammierung 5
S ResultSet Datenbankprogrammierung 2
A MySQL ResultSet.updateBytes schlägt fehl Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
D ResultSet gibt nichts aus. Datenbankprogrammierung 3
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
ARadauer JDBC ResultSet schließen? Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
J jdbc ResultSet types Datenbankprogrammierung 5
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
F ResultSet to String[] Datenbankprogrammierung 3
E ResultSet in HashMap Datenbankprogrammierung 8
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
S ResultSet in ArrayList ablegen Datenbankprogrammierung 17
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
T ResultSet initialisieren Datenbankprogrammierung 2
C kein Resultset Datenbankprogrammierung 2
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
S ResultSet variabel auslesen Datenbankprogrammierung 4
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
A Leeres ResultSet mit H2 unter Vista Datenbankprogrammierung 3
A Warum ist mein ResultSet leer? Datenbankprogrammierung 5
S ResultSet closed Datenbankprogrammierung 2
Z ResultSet mit einer anderen Datenquelle Datenbankprogrammierung 7
O Spaltenname aus Resultset Datenbankprogrammierung 2
thE_29 ResultSet und doppelte Spalten Datenbankprogrammierung 4
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
E ResultSet vergisst Reihe? Datenbankprogrammierung 2
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
F ResultSet refresh moeglich? Datenbankprogrammierung 3
S ResultSet enthält keine Daten Datenbankprogrammierung 2
B Geschlossenes ResultSet Datenbankprogrammierung 6
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
T ResultSet schließen? Datenbankprogrammierung 6
S Tabelle updaten wenn ResultSet aus JDBC-Quelle Datenbankprogrammierung 2
S ResultSet Datenbankprogrammierung 6
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
B No ResultSet was produced Datenbankprogrammierung 2
S ResultSet erweitern ? Datenbankprogrammierung 4
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
RaoulDuke ResultSet - Wie arbeitet sowas intern Datenbankprogrammierung 2
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
T MAX und ResultSet#next Datenbankprogrammierung 10
R ResultSet zu bestimmtem DS navigieren Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben