2010-01-28 5 views

Antwort

24

Sie können in Ihrem ResultSet nach wasNull suchen, um herauszufinden, ob der Wert null war.

Beachten Sie, dass Sie zuerst eine der Getter-Methoden für eine Spalte aufrufen müssen, um zu versuchen, ihren Wert zu lesen, und dann die Methode wasNull aufrufen, um festzustellen, ob der gelesene Wert SQL NULL ist.

Wenn Sie danach wirklich eine Double benötigen, können Sie es aus dem double zurückgeben.

+2

+1 kaum mehr zu sagen – stacker

14

Eine Alternative zu den oben genannten ResultSet#wasNull() ist ResultSet#getObject() auf null so zu testen, dass Sie schön es in einer einzigen Zeile in Verbindung mit dem ternären Operator setzen können:

Double d = resultSet.getObject("column") != null ? resultSet.getDouble("column") : null; 

statt

Double d = resultSet.getDouble("column"); 
if (resultSet.wasNull()) { 
    d = null; 
} 
+0

Interessanter Punkt, obwohl es hier eine Leistungseinbuße gibt, einen Getter zweimal aufzurufen, wenn der Wert nicht null ist. Vielleicht ist es nur möglich, das Ergebnis von getObject auf ein Double zu übertragen? – Yoni

+1

@Yoni: Es gibt sicherlich keine Leistungseinbußen beim Aufruf eines einfachen Getters. Die Daten sind * schon * da seit 'next()' aufgerufen wurde. – BalusC

+0

Beachten Sie jedoch, was die Dokumentation von ResultSet sagt: 'Für maximale Portabilität sollten die Ergebnismengenspalten innerhalb jeder Zeile in der Reihenfolge von links nach rechts gelesen werden, und jede Spalte sollte nur einmal gelesen werden.': @ –

2

Sie könnten einfach folgendes tun:

Double d = (Double) resultSet.getObject ("column");

dann müssen Sie sich keine Sorgen machen, wenn es null war.

+3

Vorsicht, Sie können mit einem Fehler wie "ClassCastException" enden java.math.BigDecimal kann nicht in java.lang.Double umgewandelt werden " – prageeth

Verwandte Themen