Bonjour,
J'essaye d'écrire en JAVA de manière générique des requêtes de ce type :
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.
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 <= ?;
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 :
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR: syntax error at or near "01"
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
Partager