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

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    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 confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    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 confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    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 éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Il faudrait penser à rajouter un catch juste avant le finally pour gérer une éventuelle exception
    "Le calendrier, c'est la bureaucratie du temps." Quino

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    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

  7. #7
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 140
    Points
    140
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String updateLong = "UPDATE log" + "SET StartDate = d";
    Ici, il faut un espace entre "log" et "SET" pour que l'update se passe bien.

    StartDate = d => ici, dans ta colonne StartDate tu as la valeur "d" et non, et je pense c'est ce que tu veux, la valeur de ta variable d.
    Il faut donc mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String updateLong = "UPDATE log SET StartDate = " + d;
    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);
    C'est normal, la méthode executeUpdate (utilisée pour les instructions UPDATE, DELETE et INSERT) retourne un int.

    La méthode que tu dois utiliser pour une requête du genre SELECT, et qui te retourne un ResultSet est : executeQuery(String sql)

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