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 :

[PostgreSQL] Faire un Insert des valeurs d'un select (qui est un PreparedStatement)


Sujet :

JDBC Java

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut [PostgreSQL] Faire un Insert des valeurs d'un select (qui est un PreparedStatement)
    Bonjour,
    J'essaye d'écrire en JAVA de manière générique des requêtes de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into report_table(table_name, id, detection_time, reception_time, user_name, type) 
    select 'login_event', id, time, time, user_name, type from login_event where time >= ? and time <= ?;
    Pour résumer, le but est de copier le contenu d'une table matchant une fourchette de dates dans les champs correspondants d'une autre. J'ai donc écrit une fonction en JAVA permettant de générer cette requête par rapport aux tables à copier. La requête se construit textuellement avec un StringBuilder tout au long de la fonction, jusqu'à l'implémentation du SELECT que je transforme en PreparedStatement afin de remplacer les "?" par les dates correspondantes. Ensuite je converti le tout en string via toString() ce qui me donne une requête select textuelle à mettre à la suite de ma requête insert.

    Le problème, c'est que je me retrouve alors avec la requête du dessus, mais avec des dates dans le format suivant à la place des "?" : "2015-12-10 00:59:59.060000 +01:00:00".
    Pour info, c'est un objet de type java.sql.Timestamp qui est inséré dans les "?", via PreparedStatement.setTimestamp. Le statement généré s'exécute correctement, mais la requête Insert finale contenant les dates ne s'éxécute pas.

    un connection.prepareStatement(lQueryInsert.toString()).execute() provoque une PSQLException :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR: syntax error at or near "01"
    L'erreur est la même quand je teste ma requête directement sous PostgreSQL, à mois que j'entoure les dates d'apostrophes, dans ce cas tout fonctionne. Seulement comment intégrer les ' dans un preparedStatement ?

    Du coup existerait-il un moyen de générer une requête SELECT valide ? Ou alors comment insérer directement un objet PreparedStatement dans une requête Insert ?

    Merci de votre aide

  2. #2
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    En fait, je me suis embrouillé tout seul. On peut gérer les inserts de la même manière que les select avec les prepared statement. Donc il suffit de créer la requête entière et de créer un preparedStatement à partir de celle-ci et d'ensuite appliquer les setTimeStamp. quand on execute le statement, ça fonctionne et ça s'insère. Vu que mon code est fait de fonctions imbriquées les unes dans les autres, je vais simplement illustrer ma réponse avec l'exemple qui m'a mis sur la voie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void saveWithUnnestPreparedStatement(List<String> names)
      throws UnexpectedException {
        try (Connection con = dataSource.getConnection(); 
          PreparedStatement ps = con.prepareStatement("insert into test (name) select * from unnest(?)")) {   
            ps.setArray(1, con.createArrayOf("text", names.toArray(new String[names.size()])));
     
            ps.execute();
          } catch (SQLException e) {
                throw new UnexpectedException(e);
          }
      }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire le produit des valeurs d'un champ
    Par clemasson dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 16/03/2008, 10h08
  2. Réponses: 9
    Dernier message: 18/02/2008, 11h25
  3. insertion des valeurs dans une colonne
    Par freestyler1982 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 16h38
  4. Réponses: 1
    Dernier message: 23/01/2007, 18h23
  5. [JDBC]Probleme d'insertion des valeurs !!
    Par tarik75 dans le forum JDBC
    Réponses: 6
    Dernier message: 27/07/2005, 12h41

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