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