IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

jdbc: conversion format timestamp sur une colonne


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut jdbc: conversion format timestamp sur une colonne
    Bonjour,
    j'ai utilisé JDBC pour me connecter à une BD Mysql. je voudrais faire une conversion de format de date: de timestamp vers format date normal, sur une colonne de la BD. Mais j'arrive pas à le faire, c'est indiqué comme quoi je peux pas convertir de int vers Resultset,j'ai pas compris pourquoi, c'est sur cette ligne:

    ResultSet rs = stmt.executeUpdate(query);

    mon code se présente comme ça:
    ----------------------
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public static void main(String args[]) {
     
       String url = "jdbc:mysql://localhost:3306/test";
       Connection con = null;
     
       try {Class.forName("com.mysql.jdbc.Driver");
          con = DriverManager.getConnection(url,"root","");
          Statement stmt = con.createStatement();
     
       long timeMillis ;
       Date d = new Date((long)timeMillis);
       SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd hhmms");
       System.out.println(formatter.format(d));
     
     
       String updateLong = "UPDATE log" + "SET StartDate = d";
     
       stmt.executeUpdate(updateLong);
       String query = "SELECT StartDate FROM log" ;
     
    ResultSet rs = stmt.executeUpdate(query);
     
     
       while(rs.next()){
           Date s = rs.getDate(2);
           System.out.println("Dates converties" + " :" + s );
       }
    .......

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Il faut que tu utilise les PreparedStatement

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci pour ta réponse. je viens de lire la doc sur les Prepared Statement.
    ce que j'ai compris c'est que l'intérêt de ces Prepared Statement est qu'ils sont déja compilés et que ça permettrait de gagner du temps par des exécutions multiples..
    dans mon cas, comment je pourrais faire une conversion de type dans une Prepared Statement?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    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
    16
    17
    Connection conn = null;
        PreparedStatement pstmt = null;
        try {
          conn = getConnection();
          String query = "insert into date_table(id, date_column) values(?, ?)";
          pstmt = conn.prepareStatement(query);
          pstmt.setString(1, "0001");
          java.sql.Date date = getCurrentJavaSqlDate();
          pstmt.setDate(2, date);
     
          // execute query, and return number of rows created
          int rowCount = pstmt.executeUpdate();
          System.out.println("rowCount=" + rowCount);
        } finally {
          pstmt.close();
          conn.close();
        }

  5. #5
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Il faudrait penser à rajouter un catch juste avant le finally pour gérer une éventuelle exception

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je ne comprends pas bien ton problème...
    En l'occurrence, il ne s'agit pas d'un timestamp mais de la représentation "long" d'une date.
    Rien ne t'empêche de faire new java.sql.Date(laValeurLong) pour avoir une Date exploitable par JDBC, pourquoi passer par SimpleDateFormat ?

    Effectivement, il faudrait passer par un PreparedStatement (et plus généralement, tu devrais TOUJOURS utiliser un preparedStatement, l'injection est source de problèmes (données et sécurité))

    En résumé, ton code ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    PreparedStatement pstmt = connection.prepareStatement("insert into Table(colString, colDate) values(?, ?)");
    pstmt.setString(1, 'laValeurString');
    pstmt.setDate(2, new java.sql.Date(laValeurLong));
    pstmt.execute();
    ...
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Requète sur une colonne de type TimeStamp
    Par Alterans dans le forum Linq
    Réponses: 0
    Dernier message: 13/10/2014, 09h52
  2. Création d'intervalle sur une colonne Timestamp
    Par alex_972 dans le forum SQL
    Réponses: 7
    Dernier message: 04/05/2012, 12h35
  3. Réponses: 2
    Dernier message: 31/08/2006, 09h57
  4. Trigger sur une colonne ?
    Par hpalpha dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 14h16
  5. Check sur une colonne de table "en cours"
    Par in dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/07/2003, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo