JAVA SE et Base de donnees Postgre
Fermé
basopro
Messages postés
100
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
3 juin 2015
-
Modifié par BmV le 3/04/2013 à 19:00
basopro Messages postés 100 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 3 juin 2015 - 6 avril 2013 à 19:58
basopro Messages postés 100 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 3 juin 2015 - 6 avril 2013 à 19:58
A voir également:
- JAVA SE et Base de donnees Postgre
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Formules excel de base - Guide
- Gigaset ne reconnait plus sa base - Forum telephonie fixe
8 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 3/04/2013 à 18:58
Modifié par KX le 3/04/2013 à 18:58
Il me semble (tu testeras) que tu peux remplacer tes échappements par une simple apostrophe.
Remarque : tes Req+= sont une perte inutile de temps et de mémoire, il est préférable de l'écrire en une seule String, plutôt que de faire deux opérations de concaténation inutiles qui vont au final manipuler 5 String quand 1 seul suffit...La confiance n'exclut pas le contrôle
String Req = "SELECT Cod_Prod, 'Nom_Prod', 'produits'.'Cod_Comd', 'commandes'.'Cod_Comd', 'commandes'.'DateComd' FROM commandes INNER JOIN 'produits' ON 'commandes'.'Cod_Comd'='produits'.'Cod_Comd' ORDER BY 'commandes'.'Cod_Comd'";
Remarque : tes Req+= sont une perte inutile de temps et de mémoire, il est préférable de l'écrire en une seule String, plutôt que de faire deux opérations de concaténation inutiles qui vont au final manipuler 5 String quand 1 seul suffit...La confiance n'exclut pas le contrôle
basopro
Messages postés
100
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
3 juin 2015
1
3 avril 2013 à 19:58
3 avril 2013 à 19:58
Merci, mais ça ne marche toujours pas, et l'erreur m'apprend que la colonne 'commandes'.'Cod_Comd' est introuvable, parcontre quand j'execute lq solution que tu viens de donner au niveau du SGBDR Postgres, ca marche san bleme, ce qui sous entend que le probleme est au niveau de JAVA;
cordiqlement
cordiqlement
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
3 avril 2013 à 20:09
3 avril 2013 à 20:09
Je n'y connais pour ainsi dire pas grand chose en SQL, et encore moins au Postgre, mais la notation 'produits'.'Cod_Comd' est bizarre syntaxiquement, ne serait-ce pas plutôt 'produits.Cod_Comd' (avec le point dans les guillemets) ?
basopro
Messages postés
100
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
3 juin 2015
1
Modifié par basopro le 3/04/2013 à 20:28
Modifié par basopro le 3/04/2013 à 20:28
effectivement,
cordialement
'produits'est ler nom de la table et
'Cod_Comd'est le nom de la colonne, :lq syntaxe standard est la suivante:
produits.Cod_Comdmalgré tout ca, ca ne marche pas; <eclip^se ou nNet>Beans m'insulte en me disant que 'produits'.'Cod_Comd' est introuvable
cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
3 avril 2013 à 20:29
3 avril 2013 à 20:29
Montre le code Java que tu utilises et le code d'erreur que tu obtiens.
basopro
Messages postés
100
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
3 juin 2015
1
Modifié par basopro le 3/04/2013 à 21:10
Modifié par basopro le 3/04/2013 à 21:10
voici le code:
il s'agit dan un premier temp 'dafficher le contenu de la table "produit", ensuite je les modifie via la requete (UPDATE .....), en fin je reaffiche le contenu de cette meme table pour voir si les modification on pris effet.
=======================================
et voici l'erreur :
============================
c'est juste un test que je fesais.
cordialement.
il s'agit dan un premier temp 'dafficher le contenu de la table "produit", ensuite je les modifie via la requete (UPDATE .....), en fin je reaffiche le contenu de cette meme table pour voir si les modification on pris effet.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSetMetaData; import java.sql.ResultSet; import java.sql.Statement; public class ConnectDB { public static void main(String[] args) { // Processus de connexion a une base de donnee Postrgre via Java SE try { Class.forName("org.postgresql.Driver"); System.out.println(" Driver reussi !"); // Variable de connexion String URL="jdbc:postgresql://localhost:5432/Client"; String Login= "****"; String Passs="****"; String Req = "SELECT \"Cod_Prod\", \"Nom_Prod\", \"produits\".\"Cod_Comd\" FROM produits "; Connection Chaine = DriverManager.getConnection(URL, Login, Passs); Chaine.setAutoCommit(false); System.out.println(" Conexion Reussie 1!"); Statement State = Chaine.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); PreparedStatement Prepare = Chaine.prepareStatement("UPDATE produits SET 'Nom_Prod'=? WHERE 'Nom_Prod'='SONY VAIO ES45'"); ResultSet Resultat = State.executeQuery(Req); ResultSetMetaData Metadata = Resultat.getMetaData(); //affichage des donees d'origines System.out.print("Donnees D'ORIGINEs\n"); while(Resultat.next()) { System.out.print("\t\t\t =>" + Resultat.getString("Nom_Prod")+ "\t\n"); } //Modification des donnees Prepare.setString(1, "SONY VAIO ES45 Core i7"); //validation de la MAJ Prepare.executeUpdate(); Resultat = State.executeQuery(Req); System.out.print("Donnees modifiees\n"); while(Resultat.next()) { System.out.print("\t\t\t =>" + Resultat.getString("Nom_Prod")+ "\t\n"); } Resultat.close(); State.close(); } catch(Exception e) { e.printStackTrace(); System.out.println(" Conexion echouee!"); } } }
=======================================
et voici l'erreur :
============================
org.postgresql.util.PSQLException: ERROR: syntax error at or near "'Nom_Prod'" Position: 21 Conexion echouee! at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334) at ConnectDB.main(ConnectDB.java:56)
c'est juste un test que je fesais.
cordialement.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
3 avril 2013 à 22:09
3 avril 2013 à 22:09
Quelques remarques préliminaires :
1) les noms de variables en Java commencent par convention avec des minuscules afin de distinguer les appels de méthodes sur des objets, les appels de méthodes statiques sur des classes, et les appels de classes internes statiques sur des classes.
2) pas besoin de mettre des \n à la fin de tes print, tu peux utiliser println !
3) décomposes ton code en méthodes quand tu le peux, d'autant qu'ici tu fais deux fois la même séquence (avant et après modification), ça permet de découper les opérations, et de s'y retrouver plus facilement.
4) ferme toujours tout ce que tu ouvres, dans ton code tu fermais par exemple le dernier "Resultat" mais pas le premier, ça peut un jour te poser problème, notamment en terme de mémoire (car celui qui n'est pas fermé empêche un nouveau d'être créé, si tu as des limites sur le nombres de résultats ouverts par la BDD, tu pourrais alors te retrouver coincer)
5) les try/catch doivent être placés judicieusement afin de gérer les exceptions sur les parties de code qu'elles filtrent. Il n'est donc pas normal d'avoir "Conexion echouee!" dans ton exécution alors que l'erreur ne se situe pas à la connexion. Alors, cela demande plus de code, c'est long et fastidieux, mais ça te permet de mieux gérer les erreurs, et donc de déboguer plus facilement.
Remarque : vu que je n'ai pas de base de données, je n'ai pas pu tester le code, mais maintenant que les try/catch sont bien mis, dis moi les erreurs que tu obtiens.
1) les noms de variables en Java commencent par convention avec des minuscules afin de distinguer les appels de méthodes sur des objets, les appels de méthodes statiques sur des classes, et les appels de classes internes statiques sur des classes.
2) pas besoin de mettre des \n à la fin de tes print, tu peux utiliser println !
3) décomposes ton code en méthodes quand tu le peux, d'autant qu'ici tu fais deux fois la même séquence (avant et après modification), ça permet de découper les opérations, et de s'y retrouver plus facilement.
4) ferme toujours tout ce que tu ouvres, dans ton code tu fermais par exemple le dernier "Resultat" mais pas le premier, ça peut un jour te poser problème, notamment en terme de mémoire (car celui qui n'est pas fermé empêche un nouveau d'être créé, si tu as des limites sur le nombres de résultats ouverts par la BDD, tu pourrais alors te retrouver coincer)
5) les try/catch doivent être placés judicieusement afin de gérer les exceptions sur les parties de code qu'elles filtrent. Il n'est donc pas normal d'avoir "Conexion echouee!" dans ton exécution alors que l'erreur ne se situe pas à la connexion. Alors, cela demande plus de code, c'est long et fastidieux, mais ça te permet de mieux gérer les erreurs, et donc de déboguer plus facilement.
Remarque : vu que je n'ai pas de base de données, je n'ai pas pu tester le code, mais maintenant que les try/catch sont bien mis, dis moi les erreurs que tu obtiens.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ConnectDB { private static void displaySelect(Connection connection) { Statement statement = null; try { statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch (SQLException e) { System.err.println("Erreur de création du statement"); e.printStackTrace(); return; } ResultSet result = null; try { result = statement.executeQuery("SELECT 'Cod_Prod', 'Nom_Prod', 'produits.Cod_Comd' FROM 'produits'"); } catch (SQLException e) { System.err.println("Erreur d'exécution de la requête"); e.printStackTrace(); return; } try { while(result.next()) System.out.print("\t\t\t =>" + result.getString("Nom_Prod")+ "\t\n"); } catch (SQLException e) { System.err.println("Erreur de lecture du résultat"); e.printStackTrace(); } try { result.close(); } catch (SQLException e) { System.err.println("Erreur de fermeture du ResultSet"); e.printStackTrace(); } try { statement.close(); } catch (SQLException e) { System.err.println("Erreur de fermeture du Statement"); e.printStackTrace(); } } private static void executeUpdate(Connection connection) { PreparedStatement statement = null; try { statement = connection.prepareStatement("UPDATE produits SET 'Nom_Prod'=? WHERE 'Nom_Prod'='SONY VAIO ES45'"); } catch (SQLException e) { System.err.println("Erreur de création du PreparedStatement"); e.printStackTrace(); return; } try { statement.setString(1, "SONY VAIO ES45 Core i7"); } catch (SQLException e) { System.err.println("Erreur de modification du paramètre"); e.printStackTrace(); } try { statement.executeUpdate(); } catch (SQLException e) { System.err.println("Erreur d'exécution de la requête"); e.printStackTrace(); } try { statement.close(); } catch (SQLException e) { System.err.println("Erreur de fermeture du PreparedStatement"); e.printStackTrace(); return; } } public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { System.err.println("Erreur de chargement du driver"); e.printStackTrace(); return; } Connection connection = null; try { connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Client", "****", "****"); } catch (SQLException e) { System.err.println("Erreur de connexion"); e.printStackTrace(); return; } //======================// System.out.println("Données d'origines :"); displaySelect(connection); executeUpdate(connection); System.out.println("Données modifiées :"); displaySelect(connection); //======================// try { connection.close(); } catch (SQLException e) { System.err.println("Erreur de fermeture de la connexion."); e.printStackTrace(); return; } } }
basopro
Messages postés
100
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
3 juin 2015
1
3 avril 2013 à 22:42
3 avril 2013 à 22:42
voici ceque je recois comme erreur:
=========================================
Merci por la restructuration du code, il est encore mieux
Cordialement
=========================================
run: Données d'origines : Données modifiées : Erreur d'exécution de la requête org.postgresql.util.PSQLException: ERROR: syntax error at or near "'produits'" Position: 57 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254) at ConnectDB.displaySelect(ConnectDB.java:27) at ConnectDB.main(ConnectDB.java:142) Erreur d'exécution de la requête org.postgresql.util.PSQLException: ERROR: syntax error at or near "'Nom_Prod'" Position: 21 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334) at ConnectDB.executeUpdate(ConnectDB.java:94) at ConnectDB.main(ConnectDB.java:144) Erreur d'exécution de la requête org.postgresql.util.PSQLException: ERROR: syntax error at or near "'produits'" Position: 57 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254) at ConnectDB.displaySelect(ConnectDB.java:27) at ConnectDB.main(ConnectDB.java:147) BUILD SUCCESSFUL (total time: 0 seconds)
Merci por la restructuration du code, il est encore mieux
Cordialement
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
4 avril 2013 à 05:35
4 avril 2013 à 05:35
Bon, il y a l'affichage qui ne marche pas terrible, il faut remplacer les System.out par des System.err on y verrai plus clair :
Mais clairement, on voit bien que ce sont tes trois requêtes qui plantent (pas une seulement)
Essaye sans aucun guillemet pour les noms de champs, parce que du peu de code SQL que j'ai pu croiser, je ne me souviens pas qu'il y ait eu autant de guillemets dans des requêtes...
//======================// System.err.println("Données d'origines :"); displaySelect(connection); executeUpdate(connection); System.err.println("Données modifiées :"); displaySelect(connection); //======================//
Mais clairement, on voit bien que ce sont tes trois requêtes qui plantent (pas une seulement)
ERROR: syntax error at or near " 'produits' " Position: 57 ERROR: syntax error at or near " 'Nom_Prod' " Position: 21 ERROR: syntax error at or near " 'produits' " Position: 57
Essaye sans aucun guillemet pour les noms de champs, parce que du peu de code SQL que j'ai pu croiser, je ne me souviens pas qu'il y ait eu autant de guillemets dans des requêtes...
result = statement.executeQuery("SELECT Cod_Prod, Nom_Prod, produits.Cod_Comd FROM produits"); statement = connection.prepareStatement("UPDATE produits SET Nom_Prod=? WHERE Nom_Prod='SONY VAIO ES45'");
basopro
Messages postés
100
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
3 juin 2015
1
6 avril 2013 à 19:58
6 avril 2013 à 19:58
Merci pour ton aide KX. meme sans les guillemets, y a toujours erreurs.