Wenn ich mit einem JDBC-Resultset arbeite, möchte ich Double statt Double erhalten, da diese Spalte nullfähig ist. Rs.getDouble gibt 0.0 zurück, wenn die Spalte null ist.Wie bekomme ich ein Double aus einem Resultset anstelle von Double?
Antwort
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.
Verwenden ResultSet.wasNull ->http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html#wasNull%28%29
Im Grunde funktioniert es für alle primitiven Typen, zuerst getDouble
, getInt
usw. verwenden, und nur dann, wenn das Ergebnis 0 ist Sie wasNull
verwenden.
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;
}
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
@Yoni: Es gibt sicherlich keine Leistungseinbußen beim Aufruf eines einfachen Getters. Die Daten sind * schon * da seit 'next()' aufgerufen wurde. – BalusC
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.': @ –
Sie könnten einfach folgendes tun:
Double d = (Double) resultSet.getObject ("column");
dann müssen Sie sich keine Sorgen machen, wenn es null war.
Vorsicht, Sie können mit einem Fehler wie "ClassCastException" enden java.math.BigDecimal kann nicht in java.lang.Double umgewandelt werden " – prageeth
- 1. Wie konvertiere ich Double [] in Double []?
- 2. C#: double [] [] und double [,]
- 3. DStream [Double, Double] in RDD [(Double, Double)] konvertieren
- 4. long double vs double
- 5. returns long double statt double
- 6. Konnte 'Double (*) [5]' nicht in 'Double' konvertieren
- 7. Objective-C, wie konvertiere ich ein Double zu einem Int?
- 8. Double-Double-Precision Fließkomma als Summe aus zwei Doppel
- 9. Wie kann ich in Java eine Zeichenfolge in ein Double (nicht Double) konvertieren?
- 10. Wie wird die Funktion verwendet, die RDD [(Double, Double)] als Eingabe für einen Fall von Seq [Seq [(Double, Double)]] erwartet?
- 11. Typenkonflikt, zu erwarten ((Double, Double)) => Boolean, tatsächliches ((Double, Double)) => Jeden
- 12. Wie bekomme ich n Ziffern eines Haskell Double?
- 13. Wie bekomme ich die Bits eines "double" als "long"
- 14. , um Double und Decimal zu vergleichen, sollte ich Double in Dezimal oder Double in Dezimal umgewandelt?
- 15. Json.NET Primitive Typen - verwenden Sie Dezimal anstelle von Double
- 16. Haskell Monade: IO [Double] bis [IO Double]
- 17. Double Typ Casting ein Token
- 18. Wie Varchar zu Double in SQL konvertieren?
- 19. Get Double von JSON-Struktur
- 20. Wie konvertiert man ein Double zu NSInteger?
- 21. "Double Casting"
- 22. Single vs Double-Datentypen
- 23. Wie kann ich parseInt für ein Double verwenden?
- 24. Double Exponent von Benutzereingabe
- 25. Konvertieren von DateTime nach Double
- 26. Wie verwendet man math.sqrt für DStream [(Double, Double)]?
- 27. OpenCL double precision unterscheidet sich von CPU double precision
- 28. Wie formatiere ich ein Double mit Android View-Datenbindungen?
- 29. Convert void * zu double
- 30. Wie konvertiert man ein Double zu Hex?
+1 kaum mehr zu sagen – stacker