Result == null ?

Hi,

bisher hatte ich immer angenommen, wenn ich bei einer SQL-Anfrage keine Ergebnisse bekomme, bekomme ich ein null zurück aber eine Abfrage like

String name = "Desian"; // dynamisch
MyDBClass db = new MyDBClass(myParams);
ResultSet test = db.getSelect("SELECT ID FROM USERTABLE WHERE NAME='" + name + "'");
if(test == null) {
 tuWas(mitWas);
} else {
 tuWasAnderes();
}

kommt bei mir bei einer korrekten abfrage nie in den null-Zweig auch wenn ‚Desian‘ in der DB nicht exestiert.

cu Desian

Hallo,

das ResultSet ist ein Objekt und die Datensätze, die darin enthalten sind, sind nur ein kleiner Teil davon. Es gibt einen Unterschied zwischen keinem Objekt (result = null) und einem leeren Objekt (und Dein resultSet ist noch nicht mal leer). Du darfst in der OOP niemals daten und Objekt gleichsetzen. Du kommst mit next() weiter.

while (resultSet.next()) {
tuWas…
}

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
wieso sollte es so sein ? Ein leeres „ResultSet“ ist in jeder Hinsicht eine konsistentere Antwort.

Gruss
Enno

Hi,

SQL ist eine in sich abgeschlossene Sprache. Das heisst, dass eine Antwort einer Anfrage wieder in einer neuen Anfrage genutzt werden kann (z.B.: bei geschachtelten SELECT-Anweisungen.) Wenn deshalb null zurückgegeben würde, dann könntest du das Ergebnis nicht weiternutzen, es wird also nur eine leere Tabelle zurückgeliefert…

Ralph

OK,

soviel verstehen ich noch.
Wie frage ich aber ein Leres Result ab?
Gibts sowas wie result.isEmpty() ?

cu Desian

Hallo,

soviel verstehen ich noch.
Wie frage ich aber ein Leres Result ab?
Gibts sowas wie result.isEmpty() ?

ResultSet.next ist dazu geeignet, denn Du mußt den Zeilenpointer ohnehin erst mal auf eine valide Zeile setzen, bevor zugeriffen werden kann

ResultSet rs=…

if (rs.next())

Gruss
Enno

1 „Gefällt mir“

Hi,

coole Idee. Hab noch gar nicht dran gedacht.
Da wert ich mal gleich die ’ aus allen Eingabefeldern für die DB rausfiltern.

cu Desian

Tut so!
Danke!

cu Desian

Hallo,

Wie frage ich aber ein Leres Result ab?
Gibts sowas wie result.isEmpty() ?

Generell hilf in diesen Fällen die Java API Dokumentation weiter. Ein Blick da rein würde sich mal lohnen.

http://java.sun.com/j2se/1.4.2/docs/api/

mfg
deconstruct

coole Idee. Hab noch gar nicht dran gedacht.
Da wert ich mal gleich die ’ aus allen Eingabefeldern für die
DB rausfiltern.

Es geht noch einfacher. Du musst nur als Zugriffstechnik prepare execute verwenden. Dann brauchst du gar nichts filtern. Warum?
Weil bei einem prepare das SQL-Statement an die DB geschickt wird und
dieses dann geparst, validiert, optimiert und der Zugriffsplan erstellt
wird. Anschliessend bindest du nur die Parameter und führst es aus.
Also:

PreparedStatement pStmt = conn.prepareStatement("SELECT ID FROM USERTABLE WHERE NAME = ? ");
pStmt.setString(1, stringName);
ResultSet res = pStmt.executeQuery();

Das ? steht als Platzhalter und mit der set-Methode bindest du
einen konkreten Wert an einen Platzhalter. Der Vorteil liegt hauptsächlich in der Performance. Aber nur wenn du mehrere Anfragen
nacheinander machen musst und sich jeweils nur der Bedingungsteil
unterscheidet.

1 „Gefällt mir“

Hey das gefällt mir.
Das macht wirklich vieles einfacher.
Und es tut so, wie es soll.
Danke!

cu Desian