[JDBC]ecart entre mes date en BD et JAVA

Marc -  
 Marc -
Bonjour,

J'utilise une table SQL simple dans laquelle, il y a une colonne de format DATE, et ou les valeurs sont représentées comme ceci:

2012-04-14

Elles sont associées a une colonne ID int Identity(1,1) en clé primaire

J'utilise une interface JAVA Swing (via un Jtable) qui affiche ces dates, et ou je peux modifier, supprimer et ajouter des dates, le tout via PreparedStatement. Aucune erreur de compilation détectée, mais dans l'affichage j'ai continuellement un écart de 2 jours...

Exemple:

J'ajoute sur mon interface, une date: le 15/04/2012 (il est ici dans un JText en String)
L'ajout se passe bien, et lorsque je fais un select sur SQL Serveur, je la voies qui s'est bien ajoutée sous le format 2012-04-15.
Lorsque je rafraichit l'affichage sur la Jtable pour faire apparaitre cette dernière, je la vois bien grâce a son ID, mais je lis 2012-04-13.

Quelque soit la date entrée, lors de l'affichage dans la Jtable (même en println d'ailleurs), la date s'affiche en perdant 2 jours par rapport à celle en base de données.

Je n'arrive pas a trouver où est le problème, si quelqu'un peut m'aider, je lui en serais reconnaissant.

Merci d'avance,

Marc.

A voir également:

4 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Est-ce que tu utilises java.util.Date ou java.sql.Date ? A priori c'est la deuxième que tu devrais utiliser, en faisant bien attention de mettre l'heure et la minute à 0 si tu ne t'en sers pas.
0
Marc
 
Bonjour KX.

Non je n'utilse pas de format DATE dans mon appli JAVA. Je la transforme en String ainsi (j'ai essayé de changer le preparedstatement en statement mais le resultat est le meme)

...

Connection con = connectDB; //petite methode qui etablie la connexion JDBC
Statement stmt = connexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM MesDates");
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getInt("ID");
v.add(rs.getString("DATES"));
JTableDatesModel.addRow(v);

...
}
0
Marc
 
Je viens de faire un petit essais en faisant ainsi :

...

while (rs.next()) {
java.sql.Date maDate = rs.getDate("DATE");
System.out.println(maDate)
}
...


Le probleme reste le meme ici aussi, je recupere des dates qui ont 2 jours de moins que celles qui sont dans la base de donnée.
0
Marc
 
Bon ben j'ai fini par résoudre le problème en trichant...

J'ai changé ma requête de :

SELECT * FROM MesDates


en

SELECT ID, DATEADD(DAY, 2, DATE) AS DATE FROM MesDates


c'est pas tres propre, mais vu que je n'arrive pas a atteindre la source du probleme, je m'en contenterais ^^.

Merci KX pour m'avoir lu :)
0