[SQL Server et Java] Problème avec les dates

Problème avec les dates [SQL Server et Java] - SQL/NoSQL - Programmation

Marsh Posté le 21-05-2008 à 16:28:02    

Bonjour,
 
J'ai un soucis avec les dates sur SQL Server.
Je fais une appli en Java qui insère des données.
Lorsque j'insère la date en Java, je fais  
 

Code :
  1. INSERT INTO client VALUES("20010101" );


 
Cela n'insère pas la date, mais ça m'affiche cette erreur :
 
[I]Une erreur de dépassement arithmétique s'est produite lors de la conversion de expression en type de données datetime.[/I]
 
Lorsqu'en Java j'essaie :
 

Code :
  1. INSERT INTO client VALUES("0" );


 
Cela insère la date "1900-01-01".
 
 
Or lorsque je lance SQL Server, je fais une requête, et j'insère 20010101, cela se fait correctement.  
Comment cela se fait-il ?
Je me souviens avoir fait un  
 

Code :
  1. SET DATEFORMAT DMY


Mais bon, cela n'affecte que le code Java, et pas le code sous SQL Server.
 
Merci.

Reply

Marsh Posté le 21-05-2008 à 16:28:02   

Reply

Marsh Posté le 21-05-2008 à 17:02:23    

il faut toujours mieux ne pas passer une date en string sans la fonction adéquate, sinon tu dépends de la paramétrisation du serveur, je connais pas sql serveur mais en oracle tu as un to_date('2008-01-01','YYYY-MM-DD') ou tu passes un masque.
 
(mais la vraie bonne méthode serait d'utiliser un prepared statement et lui passer un sql.date (si je me souvient bien))

Reply

Marsh Posté le 21-05-2008 à 17:58:35    

Merci pour le conseil.
Par contre je n'ai encore jamais utilisé de PreparedStatement. Je vais me renseigner dessus.  
Pour la date, est-il possible de convertir une date en nombre de jours ?
Sur SQL Server, je n'arrive vraiment pas à changer le format à l'aide des fonctions existantes (le Set Dataformat est d'ailleurs la cause de mes soucis :-( )
 
je m'explique : Java, quand il donne le nombre de jours d'une date, le fait à compter de 1970.
Or, sur SQL Server c'est à partir de 1900. Je voudrais donc savoir s'il existe une fonction en Java pour convertir une date en nombre de jour depuis le 1/1/1900.
Merci.


Message édité par Sbartacus le 21-05-2008 à 17:59:15
Reply

Marsh Posté le 21-05-2008 à 18:40:14    

Problème résolu : en Java, au lieu de faire  
 
 

Code :
  1. INSERT INTO client VALUES("20010101" );


 
Il fallait faire  

Code :
  1. INSERT INTO client VALUES("'20010101'" );


 
Voilà l'art de perdre 3 heures à cause de simples guillemets. :(
 
Par contre si vous pouviez m'en dire plus sur l'utilité d'un PreparedStatement, ça m'intéresse. ^^[cpp]


Message édité par Sbartacus le 21-05-2008 à 18:41:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed