Leeres Feld wird nicht als solches interpretiert

Hallo,

ich habe eine Java Anwendung die auf eine Postgresql Datenbank zugreift. Soweit klappt auch alles wunderbar, nur laufe ich aktuell in einen unschönen Fehler. Ich habe ein Feld ‘PLZ’ (Character 5) in meiner Tabelle, das manchmal auch leer sein kann. Das versuche ich in Java zu überprüfen und weiter zu behandeln.

 if(plz == " '' " ){System.out.println("plz is empty");}
else if(plz == "" ){System.out.println("plz is empty");}
else if(plz == NULL ){System.out.println("plz is empty");}

Keine der Abfragen erzielt ein Ergebnis, wenn ich mir die Tabelle jedoch in Postgres anschaue bzw. das Feld anklicke, dann habe ich 5 Blanks in dem Feld stehen, die aber durch eine Abfrage nicht zu “bekommen” sind, sondern das Feld ist für die Datenbank leer

select * from myTable where plz = ''

gibt mir exakt alle Felder deren PLZ leer ist, die aber an Java übergeben 5 blanks haben, auf die ich aber nicht überprüfen kann. ^^ Unglaublich aber wahr, ich prüfe in der Datenbank ob ‘Feld n’ leer ist und kriege True als Antwort, wenn ich jedoch dasselbe Feld dann in meinem Resultset in Java auf leere überprüfe, kriege ich als Antwort False (bzw. Feld nicht leer).

Ich habe mir auch den Bytewert der Felder in Java mal anzeigen lassen und dachte das womöglich alle Felder die “leer” sind wenigstens dieselbe Bytefolge haben, dies war auch nicht der Fall. Ich hatte jedesmal anderen “Datenmüll”.

Stell ich mich einfach nur Dumm an oder wo ist mein Denk/Programmierfehler hier bei der Sache.

Vielen Dank für Hilfe.

Ein == NULL funktioniert nicht, verwende isnull() dafür.

Andreas

Danke für die schnelle Antwort.
Ich habe gerade nochmal mit isnull() geprüft und kein True gekriegt.
Ich habe mir die Länge mal angeben lassen

System.out.println("The length of plz is: "+ dbSet[2].length());

Und die Antwort war 5.
Wenn ich aber mit einer Variable die 5 Blanks enthält gegenprüfe kriege ich auch nicht True.
Ich verzweifel.

Die Antwort ist :

String str = "     ";
if(dbSet[2].equals(str)){System.out.println("plz is empty");}

Keine wirklich schöne Lösung, aber sie funktioniert.

Der Grund wieso ein

if(dbSet[2] == str){System.out.println("plz is empty");}

[/CODE]
nicht dasselbe Ergebnis liefert findet man hier: Java Blog Buch : 03.02 Strings vergleichen

Die einzige Sache die sich mir noch nicht erschlossen hat, ist wieso die Datenbank ein leeres Feld, welches als Character(5) eingestellt ist, als String mit 5 (leeren) Zeichen zurückgibt.

Wenn du das Feld als CHAR(5) definierst, dann sagst du der Datenbank, das du eine feste Länge von 5 Zeichen haben willst.
Demzufolge bekommst du 5 Leerzeichen zurück.

Wenn du VARCHAR(5) sagst, werden Leerzeichen am Ende abgeschnitten.

Intern werden Leerzeichen am Ende nicht mitgespeichert, aber bei CHAR werden die Leerzeichen vor der Ausgabe noch aufgefüllt.