Conversion de java.sql.Date & amp; java.util.Date à org.joda.time.LocalDate
Je suis en train d'soigneusement et méticuleusement nettoyer certains de mes anciens (de production) de code. Une chose que je suis en train de faire est de convertir tous mes usages de java.util.Date
à LocalDate
et DateTime
.
Cependant, j'ai remarqué un obstacle de taille ce soir que je travaillais. J'ai eu ce code:
ResultSet results = stmt.executeQuery();
Date last = results.getDate("LAST_DELIVERY_DATE");
Date next = results.getDate("NEXT_DELIVERY_DATE");
boolean received;
if (last == null && next == null) {
received = true; //order is not open
} else if (last == null) {
received = false;
} else {
received = true;
}
Je me suis converti last
et next
:
LocalDate last = new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
et Netbeans a souligné l' if == null
et dit:
Unnecessary test for null - the expression is never null
Cela est logique, car une nouvelle LocalDate
instance n'est pas null (pas de new Object()
peut être).
MAISdans ce cas, et dans de nombreux cas tout au long de mon programme, un null
date communique quelques informations essentielles. Dans ce cas, il montre que l'ordre 1) est ouvert (ou pas), 2) a été reçu (ou pas).
Donc, en essayant de trouver des façons de contourner cela, j'ai pensé que je pourrait utiliser ce code:
LocalDate last = results.getDate("LAST_DELIVERY_DATE") == null? null : new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = results.getDate("NEXT_DELIVERY_DATE") == null? null : new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
Mais, cela semble juste laid pour moi? De Plus, il appelle le "jeu de résultats#getDate()" fonction deux fois, ce qui.... corrigez-moi si je me trompe... en fait deux appels à la base de données, droit?. Donc, maintenant, pour convertir mon code de joda-temps, je suis doublant le temps qu'il faut pour obtenir java.sql.Date
objets de la base de données...
LocalDate last = LocalDate.fromDateFields(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = LocalDate.fromDateFields(results.getDate("NEXT_DELIVERY_DATE"));
ne fonctionne pas non plus, parce que fromDateFields
jette un NullPointerException
quand il fait un null
valeur.
Donc, ma question est: comment mieux gérer les dates nulles lorsque votre programme nécessite avoir null dates et joda-time? Ai-je raté quelque chose? Est-il un moyen plus facile d'accomplir ce que je suis après?
source d'informationauteur ryvantage
Vous devez vous connecter pour publier un commentaire.
Votre code à l'aide de l'opérateur ternaire ne peut être que laconique, précisément parce que vous faire deux voyages à la base de données. Envisager la rédaction d'un
dateutil
bibliothèque avec une méthode comme ceci:De l'OMI du présent code par les nettoyer à la charge d'une souvent utilisé léger méthode statique est un bon métier.
Aussi envisager de ne pas utiliser Java. En Javascript, vous pouvez simplement utiliser
||
et ne pas avoir ce problème, par exemple. J'entends aussi la Scala est un langage de qualité qui permet de résoudre ce avec plus d'un soutien explicite deNullable
types. Aussi longtemps que vous êtes le nettoyage de l'ancien code, peut aussi bien le faire à droite.Pour Convertir java.util.Date de org.joda.temps.LocalDate