PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL

cy221

Mitglied
Hallo Forum,

ich migriere meine kleine Anwendung momentan von Oracle zu PostgreSQL.

In der Spalte A ist ein BigInt hinterlegt. Das hole ich mit mit dem JDBC-Treiber für PostgreSQL per getLong().

Die Doku besagt zu dieser Funktion:
the column value; if the value is SQL NULL, the value returned is 0

Ich will aber null in meinen Java-Objekt speichern. Ich möchte das Ergebnis aber nicht auf 0 prüfen und diesen Wert dann mit NULL überschreiben.

Geht das vielleicht mit
meinObjekt.setBitIntZahl((Long) rs.getObject("id"));
zuverlässig?

Bei setLong() ist das ja ähnlich. Dieser speichert nur long und nicht Long!


Habt ihr Ideen?

Danke.
 
Der Ansatz ist richtig, einen direkten Cast würde ich nicht wagen und stattdessen über die Long.parseLong(...) Munktion gehen, du kannst letztendlich nicht mit Sicherheit wissen, ob der ausgelesene Datentyp tatsächlich auch vom Typ Long ist (abhängig vom DB-Treiber) oder von der getLong(...) Methode dazu konvertiert wurde. Außerdem kriegst du eine Exception, wenn der Wert null ist.
Mach vorsichtshalber eine Instanceof Abfrage und caste nur dann direkt, wenn du sicher sein kannst.
Mein Ansatz wäre dieser, das ist natürlich nicht die Lösung aller Probleme
Java:
final Object oo = rs.getObject("id");
meinObjekt.setBitIntZahl(oo == null ? null : oo instanceof Long ? (Long) oo : Long.parseLong(oo.toString()))
 
Wieso nicht einfach:
Java:
Long myLong = rs.getLong("FIELD");
if(rs.wasNull()) myLong = null;
Kommt ganz ohne cast oder sonstigen Schmu aus.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben