Pourquoi ?
POURQUOI?
Pourquoi récupérer un timestamp (par Joda en plus...), le convertir en String et le passer dans ce format à la base qui va utiliser une fonction PL pour... pour quoi d'ailleurs, en refaire une date?
Soit tu passes un objet Date (vu que tu veux juste la date du jour, et que au final tu veux stocker un objet date), soit dans ta requête tu mets un sysdate !
Et quand tu récupères tes infos, tu auras tout et sans problème vu que tu ne convertira pas trois fois une donnée pour revenir à son type d'origine !
Donc soit tu fais ça :
1 2 3 4 5 6 7 8 9 10 11 12
|
private static final String SQL = "INSERT INTO matable(num, nom, glb_dtime) VALUES (?, ?, sysdate ) )";
try (Connection con = DriverManager.getConnection("jdbc:oracle:thin:@serveurdbip:1521:sid", "username","password");
PreparedStatement pres = con.prepareStatement(SQL);){
pres = con.prepareStatement(SQL);
pres.setInt( 1, 999 );
pres.setString( 2, "nom" );
pres.executeUpdate();
} catch (SQLException e) {
// bla bla
} |
Soit tu fais ça :
1 2 3 4 5 6 7 8 9 10 11 12
|
private static final String SQL = "INSERT INTO matable(num, nom, glb_dtime) VALUES (?, ?, ?) )";
try (Connection con = DriverManager.getConnection("jdbc:oracle:thin:@serveurdbip:1521:sid", "username","password");
PreparedStatement pres = con.prepareStatement(SQL);){
pres.setInt( 1, 999 );
pres.setString( 2, "nom" );
pres.setDate( 3, new Date() );
pres.executeUpdate();
} catch (SQLException e) {
// bla bla
} |
Accessoirement, si tu es en Java7, tu n'as plus besoin de faire un Class.forName pour charger le driver (le DriverManager sait se démerder tout seul maintenant), et il faut FERMER ses ressources
(je change le code dans ce sens)
(excusez mon ton énervé, mais c'est pas la première fois que je passe derrière du code ou quelqu'un a cru qu'il serait une bonne idée de convertir 12 fois des objets contenant des dates entre un format Date et un format String tout ça pour enregistrer une date au final... Code pour rien, générateur de bugs, compliqué de voir si ça a un sens, ...)
Partager