2010-11-28 7 views
1

J'ai besoin de convertir une chaîne comme 2010-11-28 en type Date pour être sauvegardé dans une base de données PostgreSQL. J'ai essayé ce code mais quand je vérifie le résultat dans une base de données les deux dates sont nulles:Java: convertir la chaîne en date

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Date validStartDate=null; 
Date validEndDate=null; 

    try { 
     validStartDate = df.parse(startDate); 
     validEndDate = df.parse(endDate); 

    } catch (Exception e) { 

     ... 

    } 

    Assigment a = new Assignment(..., validStartDate, validEndDate); 
    session.save(s); 

------------------------- ------- Édition ----------------------------

startDate et endDate sont des chaînes dans un format yyyy- mm-jj aime le 2010-11-27. Il n'y a rien dans la trace de la pile (la conversion semble fonctionner d'une manière ou d'une autre). S'il y avait quelque chose je saurais probablement ce qui ne va pas. Après la conversion, les dates sont stockées dans une base de données postgres. Oui, j'ai utilisé util.Date au lieu de sql.Date (probablement c'est une première erreur).

------------------------------- Éditer2 -------------- -------------

Le code est simplifié mais: la trace de la pile ne montre rien d'étrange, validStartDate et validEndDate sont convertis en quelque chose comme ça mar 30 nov 00:00:00 CET (donc pas nul). L'affectation est en effet correctement enregistrée dans une base de données. Les valeurs sql: insert dans public.assignment (type, valid_start_date, valid_end_date, id) (5, NULL, NULL, 2). J'ai essayé d'utiliser sql.Date mais sans succès.

---------------------------- Mappage des affectations ---------------- -

<hibernate-mapping> 
    <class name="model.Assignment" schema="public" table="assignment"> 
    <id name="id" type="int"> 
     <column name="id"/> 
     <generator class="increment"/> 
    </id> 


    <property name="validStartDate" type="date"> 
      <column name="valid_start_date" length="13" /> 
     </property> 
     <property name="validEndDate" type="date"> 
      <column name="valid_end_date" length="13" /> 
     </property> 
     <property name="type" type="integer"> 
      <column name="type" /> 
     </property> 

    </class> 
</hibernate-mapping> 

J'utilise Hibernate pour enregistrer les données utilisateur. La chaîne est créée par un widget Datepicker JQuery. Est-ce que quelqu'un sait comment résoudre ce problème? Merci d'avance pour votre aide.

+0

Êtes-vous sûr que 'startDate' et' endDate' sont correctement remplis? – Bozho

+2

Donc, vous ne gérez pas l'exception, mais l'ignorez et continuez le flux de code? Vous devriez jeter l'exception! Il contient des informations précieuses sur le problème. – BalusC

+0

Votre code est incomplet ... Qu'est-ce que 'startDate, endDate', où' a' va, ce qui est 'session, s'. 'catch' est vide ou quoi? – khachik

Répondre

1

Quelques commentaires des questions:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Date validStartDate=null; 
Date validEndDate=null; 

try { 
    validStartDate = df.parse(startDate); 
    validEndDate = df.parse(endDate); 

} catch (Exception e) { 
    // are there any exceptions thrown and caught here? 
} 

// are validStartDate and validEndDate non-null at this point? 
// is this code even executed? it won't be if an exception was thrown... 
Assigment a = new Assignment(..., validStartDate, validEndDate); 

// where did this "s" come from? did you mean "session.save(a)"? 
session.save(s); 

En dehors de ces questions, vous devriez vérifier les points suivants:

est Hibernate vraiment économiser votre Assignment dans la base de données?

Vos mappages Hibernate sont-ils corrects?

Avez-vous essayé d'utiliser java.sql.date?

Quel est le SQL généré? Vous pouvez activer cette option en utilisant <property name="show_sql">true</property> dans votre fichier hibernate.cfg.xml.

Seulement en vérifiant tout ce qui précède vous serez en mesure de résoudre votre problème.

+0

Salut, voici les réponses; le code est simplifié mais: la trace de la pile ne montre rien d'étrange, validStartDate et validEndDate sont convertis en quelque chose comme ça Mar 30 Nov 00:00 CET (donc non nul). L'affectation est en effet correctement enregistrée dans une base de données. Les valeurs sql: insert dans public.assignment (type, valid_start_date, valid_end_date, id) (5, NULL, NULL, 2) – sass

+0

@sass: qu'en est-il de vos mappages Hibernate? Avez-vous précisé quelque part que les deux dates devraient être nulles lors de l'insertion? – darioo

+0

Voici le mappage: sass

0

L'objet Date est-il un objet java.util.Date ou un fichier java.sql.Date? La raison pour laquelle je demande est que SimpleDateFormat parse convertira une chaîne en un java.util.Date, mais si vous utilisez cet objet avec une base de données SQL, je suppose que vous aurez besoin de ce dernier, le java.sql.Date. Heureusement, ils peuvent être convertis assez facilement. En outre, que dit votre blocage lorsque vous essayez de convertir? Existe-t-il des exceptions?

Questions connexes