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.
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.