Bonjour,
Je suis en train de travailler sur une application où celle-ci doit être compatible Oracle et SQLServer.
Dans ce cadre, j'ai décidé de supprimer les utilisations de TO_DATE et TO_CHAR (peut-être une mauvaise idée). Suite à cela, je me suis rendu compte que je n'avais bien compris le fonctionnement des dates entre JAVA et Oracle notamment concernant les recherches "FROM - TO".
Nous utilisons dans l'application pour les dates des colonnes DATE dans Oracle. Selon les parties de l'application, les dates sont enregistrés ou non avec la partie Time.
Quand j'utilise la requête suivante :
Je me retrouve soit avec un résultat sans la partie Time 18/03/2014 00:00:00 soit avec 13/08/2014 09:54:18
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT TO_CHAR(COLUMN, 'dd/MM/yyyy HH24:mi:ss') FROM TABLE;
Quand je fais une recherche, j'ai comme critère une java.util.Date sans la partie TIME. Quand dans mon PreparedStatement, je fais une recherche sur le premier cas avec la partie Time pas dans la base :
Cela fonctionne. Par contre si j'ai la partie Time dans la base, on trouve un petit trick :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 if (applicationDateFrom != null) { where.append("\n AND qdoc.qdoc_application_date >= :xApplicationDateFrom "); params.put("xApplicationDateFrom", applicationDateFrom); } if (applicationDateTo != null) { where.append("\n AND qdoc.qdoc_application_date <= :xApplicationDateTo "); params.put("xApplicationDateTo", applicationDateTo); }
Ce que j'aimerai, c'est de pouvoir utiliser la première partie du code et quand dans ma requête la partie Time soit évaluée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 if (dateFrom != null) { where.append("\n AND qinc.qinc_creation_date >= :xDateFrom "); params.put("xDateFrom", dateFrom); } if (dateTo != null) { where.append("\n AND qinc.qinc_creation_date < :xDateTo "); GregorianCalendar to = new GregorianCalendar(); to.setTime(dateTo); to.add(Calendar.DAY_OF_MONTH, 1); params.put("xDateTo", to.getTime()); }
Si on reprend ce code :
Si la date est enregistrée dans la base comme 03.04.2014 15:00:00 et que mon paramètre est une Date représentant 03.04.2014 16:00:00 que l'enregistrement sorte et qu'il ne sorte pas si mon critère est 03.04.2014 14:00:00.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (applicationDateTo != null) { where.append("\n AND qdoc.qdoc_application_date <= :xApplicationDateTo "); params.put("xApplicationDateTo", applicationDateTo); }
J'ai essayé de passé ma colonne dans Oracle en TimeStamp. J'ai également essayé de convertir la paramètre en java.sql.TimeStamp mais rien n'y fait.
Auriez-vous des suggestions à me faire ?
Tout cela ne doit pas être très clair, mais je n'arrive pas à faire mieux Posez moi des questions si je peux rendre tout cela plus compréhensible.
Merci d'avance.
Partager