OVH Cloud OVH Cloud

MySQL : date

4 réponses
Avatar
LR
Salut,

Il y a quelques années, j'avais réalisé une application en ASP/MS Access où
je devais gérer des dates. Je me suis tellement pris la tête avec les
problèmes de conversions et de formats (parfois c'était jj/mm/aaaa, parfois
c'était mm/jj/aaaa) que finalement j'ai décidé de stocker uniquement des
entiers : aaaammjj.

J'ai été pleinement satisfait de cette solution qui me permettait de trier
et de faire tout ce que je voulais au prix uniquement d'une petite fonction
intToDate et dateToInt.

Maintenant, je suis sur une application J2EE avec MySQL et je me demande de
quelle façon je vais devoir gérer les dates. Faut-il que je reprenne ma
stratégie ci-dessus ou risque-t-elle de me poser des problèmes ?

Est-ce que la gestion des champs Date dans MySQL est suffisament bonne pour
que je n'ai pas à m'en faire ? Et le traitement des dates en java est-il
problématique ?

Merci d'avance pour vos références, conseils et retours d'expérience
Lilian

4 réponses

Avatar
JScoobyCed
LR wrote:
Salut,

Est-ce que la gestion des champs Date dans MySQL est suffisament bonne pour
que je n'ai pas à m'en faire ? Et le traitement des dates en java est-il
problématique ?

Merci d'avance pour vos références, conseils et retours d'expérience
Lilian




Bonjour,

Que cela soit MySQL ou Access, Oracle ou MS SQL, Sybase, Informix,
etc, le JDBC retourne directement un objet Date. Donc il n'y a pas de
soucis a se faire pour retrouver l'objet de la base de donnee.
Dans l'application elle meme, il suffit de convertir les champ de saisis
en objet Date, et de construire la requete SQL avec
SimpleDateFormat formatter = null;
formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
formatter.setLenient(false);
String sqlDate = formatter.format(date)


--
JSC

Avatar
Mike Baroukh
Dans l'application elle meme, il suffit de convertir les champ de
saisis
en objet Date, et de construire la requete SQL avec
SimpleDateFormat formatter = null;
formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
formatter.setLenient(false);
String sqlDate = formatter.format(date)



En fait, je ne pense pas que ce soit la bonne façon de faire.
Si on a un objet java.sql.Date (tou timestamp), il faut
- soit utiliser un PreparedStatement
- soit utiliser les escapes jdbc : sql=...where date>{ts "+date+"}" pour
un timestamp. Remplacer ts par td pour une date.

Mike

LR wrote:
Salut,

Est-ce que la gestion des champs Date dans MySQL est suffisament bonne pour
que je n'ai pas à m'en faire ? Et le traitement des dates en java est -il
problématique ?

Merci d'avance pour vos références, conseils et retours d'expérie nce
Lilian




Bonjour,

Que cela soit MySQL ou Access, Oracle ou MS SQL, Sybase, Informix,
etc, le JDBC retourne directement un objet Date. Donc il n'y a pas de
soucis a se faire pour retrouver l'objet de la base de donnee.
Dans l'application elle meme, il suffit de convertir les champ de saisis
en objet Date, et de construire la requete SQL avec
SimpleDateFormat formatter = null;
formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
formatter.setLenient(false);
String sqlDate = formatter.format(date)


--
JSC



Avatar
Mike Baroukh
Bonjour.

En jdbc, tu peux
- soit utiliser des PreparedStatement auxquels tu passe directement des
objets java.sql.Timestamp ou java.sql.date
- soit utiliser des escape particuliers qui permettent de construire des
requetes pour ta base : Si tu as un objet java.sql.timstamp, il suffit
de faire sql=...where date>{ts '"+objettimestamp+"'}"

voir :
http://java.sun.com/j2se/1.3/docs/guide/jdbc/spec/jdbc-spec.frame11.html

sachant que, lorsqu'ils mettent
{ts 'yyyy-mm-dd hh:mm:ss.f...'}
en fait, tu n'a pas à t'inquieter du format avec un java.sql.Timestamp
car sa méthode toString() formatte déjà correctement.

Mike


Salut,

Il y a quelques années, j'avais réalisé une application en ASP/MS A ccess où
je devais gérer des dates. Je me suis tellement pris la tête avec les
problèmes de conversions et de formats (parfois c'était jj/mm/aaaa, p arfois
c'était mm/jj/aaaa) que finalement j'ai décidé de stocker uniquemen t des
entiers : aaaammjj.

J'ai été pleinement satisfait de cette solution qui me permettait de trier
et de faire tout ce que je voulais au prix uniquement d'une petite foncti on
intToDate et dateToInt.

Maintenant, je suis sur une application J2EE avec MySQL et je me demande de
quelle façon je vais devoir gérer les dates. Faut-il que je reprenne ma
stratégie ci-dessus ou risque-t-elle de me poser des problèmes ?

Est-ce que la gestion des champs Date dans MySQL est suffisament bonne po ur
que je n'ai pas à m'en faire ? Et le traitement des dates en java est-i l
problématique ?

Merci d'avance pour vos références, conseils et retours d'expérienc e
Lilian




Avatar
Alain
Bonjour.

En jdbc, tu peux
- soit utiliser des PreparedStatement auxquels tu passe directement des
objets java.sql.Timestamp ou java.sql.date
- soit utiliser des escape particuliers qui permettent de construire des
requetes pour ta base : Si tu as un objet java.sql.timstamp, il suffit
de faire sql=...where date>{ts '"+objettimestamp+"'}"
tout a fait

mais attention, la méthode avec escape est très dangereuse (il suffit
que tu oublie un cas et...)... surtout si tu fais un serveur web qui
deviendra alors piratable...
un plus ca fait du code plus complexe

les prepared statement c'est hyper pratique et pas compliqué a utiliser.