Erreur de conversion d'une String vide

Comment gérer le cas où la String est vide

a marqué ce sujet comme résolu.

Bonjour, Je suis à retravailler mon code avec le PreparedStatement et j'ai un petit problème au moment de la conversion des String en valeur pour les ajouter au statement. Le problème provient du fait que dans le fichier CSV d'où j'extraie les valeur, il arrive que des champs soient vides et prennent une valeur "" dans mon tableau de champs. Ce qui fait que lorsque je veux convertir la string vide soit en Long ou en sql.Date, j'ai une erreur lors de l'exécution.

1
2
3
4
java.lang.NumberFormatException: For input string: ""
java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Date.java:143)
    at fcen2h2Sql.foodName2SQL(fcen2h2Sql.java:75)

Voici deux exemples de lignes susceptibles d'avoir à traiter une String vide:

1
2
pstmt.setDate(8, Date.valueOf(nextLine[7]) );
pstmt.setLong(9, Long.valueOf(nextLine[8]) );

C'est dans le tableau nextLine[] que se trouvent les données sous forme de String de chacun des champs à insérer dans ma BDD. Mon premier réflexe serait encore une fois de traiter le cas avec un opérateur ternaire, mais je me demandais si vous ne connaitriez pas une manière plus simple et/ou propre et efficace de faire…

A+, Nemo

Recoucou! En attendant vos commentaires, j'ai solutionné le problème de cette manière:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/* FoodDateOfPublication */
if (nextLine[7].compareTo("") != 0)
    pstmt.setDate(8, Date.valueOf(nextLine[7]) );
else
    pstmt.setDate(8, null );

/* CountryCode */
if(nextLine[8].compareTo("") != 0)
    pstmt.setLong(9, Long.valueOf(nextLine[8]) );
else
    pstmt.setLong(9, 0 );

Bonjour,

Avant d'appeler !nextLine[8].isEmpty(), il vaut mieux faire un nextLine[8] != null pour éviter une NPE.

De même, il vaut mieux faire "".equals(myString) plutôt que myString.equals(""). Mais le myString.isEmpty() est tout aussi bien voire plus performant.

Sinon, si tu souhaites sortir l'artillerie lourde, il y a StringUtils.isBlank(myString) et StringUtils.isEmpty(myString) chez commons-lang d'Apache qui sont null-safe.

+1 -0

Merci à tous pour vos précieux conseils, j’en ai appris beaucoup. Par contre, le logiciel sur lequel je travaillais était à usage unique, pour convertir une BDD csv en bdd H2 une seule et unique fois, alors je n’ai pas vraiment de possibilité de cas de valeur hors contrôle!

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte