[Java + SQL] Objekt in DB schreiben - wie mit null-Werten umgehen?

Kamikatze

Captain
Registriert
Okt. 2004
Beiträge
3.703
Hallo!

Ich hab ein kleines Problem, das egtl. ja nicht so ungewöhnlich sein dürfte, ich hoffe, es gibt dafür eine vernünftige Lösung, obwohl ich es eher bezweifle - aber fragen kostet ja nichts... also...

Ich habe ein Objekt (z.B. Person), das recht viele Daten speichert (unterschiedlichen Typs: int, String, Date), jedoch sind davon nur einige weniger Pflichtfelder.

Beim Speichern des Objektes in die Datenbank hab ich nun das Problem, dass beim Erstellen des SQL-Statements nun nicht einfach alle Felder auf einmal speichern kann, weil einige Werte davon null sind und ich den den SQL-Statement-String so nicht erstellen kann.

Code:
"insert into person(name, city, zipcode, email, ...) values ('" + p.getName() + "', '" + p.getCity() ..."

Den Strings könnte ich ja auch noch einfach den Wert "" zuweisen aber was mach ich mit den anderen Objekten?

Muss ich wirklich jeden einzelnen Wert auf null überprüfen und mir mühselig den SQL-Statement-String basteln?

PS: MySQL 5 (InnoDB)
 
Zuletzt bearbeitet:
Hallo Kamikatzem

wenn du die Daten alle in einem Array speicherts kannst du die doch alle in einer Schleife überprüfen.
Und die Null Werte kannst du ja per MySql "rausfilter" in dem du die Felder auf "not null" setzt.

Grüße

tewes
 
Ja, aber geht das so einfach?

Der Teil bei person(name, ...) müsste dann ja auch angepasst werden und das geht nur schwer automatisch. Außerdem muss noch für gültige Werte der Typ unterschieden werden, damit der String richtig erzeugt wird...
 
Wenn du den Key in deinem Array genau so genannt hast wie die Feldnamen, kannst du es leicht darüber machen. Ansonsten ein zweites Array erstellen mit dem du das Feld mit dem Array verknüpfen kannst. In dem falle wäre es aber der Code aber nicht mehr so leicht zu warten.

Grüße

tewes
 
So, ich hab jetzt eine befriedigende Lösung gefunden.

Mann kann ja null-Werte in der DB speichern, also hab ich die get-Methoden einfach durch folgende Ausdrücke ersetzt:

Code:
(a.getName() == null ? "null, " : "'" + a.getName() + "', ")
 
Das ist aber extrem unsauber. Die Getter sollten wirklich nur exakt das zurückliefern, was in der entsprechenden Property gespiechert ist. Du solltest die Logik wirklich lieber in einer eigenen Utility-Methode unterbringen, der du das Objekt übergibst und die dir dann den Query-String zurückliefert.
 
Wieso? Sie geben doch genau das zurück, was gespeichert ist... :confused_alt:

Und wenn Sie null zurückgeben, wird auch in die DB null geschrieben.
 
Falls Du da mehr als eine kleine Spielerei bastelst könnte sich u.U. auch ein Blick in Richtung Hibernate lohnen.
Nach ein paar Tagen hast Du das idR erlernt und brauchst Dir um solche KLeinigkeiten keine Gedanken mehr zu machen.
 
Ich/Wir haben Hibernate bereits beim letzten Projekt benutzt. ;)
Aber damit hatten wir durchaus auch mit anderen Problemen zu kämpfen und dieses Projekt ist außerdem recht klein, also wollte ich es gleich direkt machen.
 
Zurück
Oben