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] plusieurs requêtes ne passent pas ensemble


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut [JDBC] plusieurs requêtes ne passent pas ensemble
    Bonjour,
    j'ai cette erreur qui apparait à l'execution de cette fonction
    Source not found for AbstractJdbc2Statement$StatementResultHandler.handleCompletion() line: 204
    Voici la fonction. La reûête d'insertion marche très bien toute seule, mais dès que j'ajoute la requête de recherche des doublons, ca ne amrche plus avec l'erreur ci dessus...
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    private boolean readDataFile(FormFile input, Connection con){
     
    		InputStream is;
    		DataInputStream dis;
    		String line;
    		try {			System.out.println("rentre le try");
    			is = input.getInputStream();
    			dis = new DataInputStream(is);
     
    			String query = new String("INSERT into meteo_data2 ( grid_mdata," +
    					" day_mdata, max_temp_mdata, min_temp_mdata, rainfall_mdata, e0_mdata, " +
    					" es0_mdata, et0_mdata, radiation_mdata) values (");
     
    			Statement stmt = con.createStatement();
    			String verifDoublon = new String ("SELECT id_mdata from meteo_data2 where grid_mdata='");
     
    			while ((line = dis.readLine()) != null){
    				String[] param= line.split(",");
     
    				// recherche de doublons relatifs dans la table meteo_data 
    				verifDoublon += param[0] + " ' and day_mdata='" + param[1]+ "';";
    				System.out.println(verifDoublon);
    				ResultSet rs = stmt.executeQuery(verifDoublon);
    				System.out.println("apres");
     
    				// insertion des données
    				query += ("' "+ param[0] + " '");
    				for (int i=1; i <param.length; i++){
    					query += (" ,' "+ param[i] +" ' ");			
    				}
    				query += (");");
    				System.out.println(query);
    				stmt.executeUpdate(query);
     
    				query = new String("INSERT into meteo_data2 ( grid_mdata," +
    						" day_mdata, max_temp_mdata, min_temp_mdata, rainfall_mdata, e0_mdata, " +
    						"es0_mdata, et0_mdata, radiation_mdata) values (");
    			}
     
    			stmt.execute("COMMIT;");
     
     
    		}
    		catch (SQLException e) {
    			e.printStackTrace();
    		}
    		catch (Exception e) {
    			e.printStackTrace();
    		}
    			return true;
    	}
    Pouvez-vous m'aidez ?
    Merci d'avance.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut Re: [JDBC] plusieurs requêtes ne passent pas ensemble
    Bonjour, pourrais-tu nous dire s'il exécute au moins une fois la boucle ?
    Et est-ce que la requête que tu construis et met dans verifDoublon est une requête valide ?
    Qu'affiche-t-il lors dy sysout verifDoublon et query ?

    Sinon, sans trop savoir dans quel cadre tu compte utiliser ton programme, je ne peux que te conseiller d'utiliser des PreparedStatement au lieu de Statement, et de bien veiller à fermer les resultset et les statements. au bon endroit.

    Je n'arrive même pas à comprendre que cela puisse fonctionner comme il faut avec le insert. Car les DataInputStream sont généralement utilisé pour lire des objets ou primitives qui ont été sérialisés, et non pour lire des fichiers textes. Il vaut mieux utiliser un Reader pour cela. Voir la javadoc de DataInputStream et de la méthode readLine.

    Si tu veux plus d'explications quant à la raison de PrepareStatement au lieu de Statement, fais le savoir.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Bonjour, j'ai pris note de la réponse, merci !
    Je n'ai plus le code source à disposition...

    Il s'agit d'une application J2EE, utilisant tomcat, struts.
    Les requêtes s'affichent comme il faut, un copié/collé et elles s'executent correctement sous postgresql.

    De mémoire, la boucle passe une fois, et ca bloque au deuxième avec le executeQuery(verifDoublon)... Une mauvaise gestion de statement ?

    Pour le Reader, je prend note
    Le "insert", c'est certain qu'il réalise les insertions comme il faut dans la base. Cela dit, je corrigerai.

    Je verrai pour le prepare Statement quand j'aurais le code sous les yeux. Ca peut venir de là.

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut
    Citation Envoyé par Pwill
    Bonjour, j'ai pris note de la réponse, merci !
    Je n'ai plus le code source à disposition...

    Il s'agit d'une application J2EE, utilisant tomcat, struts.
    Les requêtes s'affichent comme il faut, un copié/collé et elles s'executent correctement sous postgresql.
    Personellement, en voyant le code, et pour autant qu'il est ici dans son entièreté, il est impossible que la requête s'exécute correctement la deuxième fois.
    Car la deuxième requête ressemblera à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id_mdata from meteo_data2 where grid_mdata='{param[0]}' and day_mdate='{param[1]}';{param[0]}' and day_mdate='{param[1]}';
    où les premiers {param[0]} et {param[1]} doivent être remplacé par les valeurs de la première ligne
    et les deuxièmes {param[0]} et {param[1]} doivent être remplacé par les valeurs de la deuxième ligne.
    De mémoire, la boucle passe une fois, et ca bloque au deuxième avec le executeQuery(verifDoublon)... Une mauvaise gestion de statement ?
    Si tu avais utilisé le PreparedStatement, cela ne serait pas arrivé.
    Pour autant que le PreparedStatement soit supporté par PostgreSQL. (au travail, on utilise Oracle, donc je ne suis pas 100% sûr pour PostgresQL, mais 95%)
    Mais si tu avais réinitialisé verifDoublon à la fin de la boucle avec la query de départ, comme c'est fait pour le insert, il y aurait moins de chance que cela se produise. (Bien que pas impossible. Suffit de mettre ',' (simple quote y compris) dans une ligne du fichier input, pour voir que cela ne fonctionne plus comme il faut avec la façon dont c'est écrit maintenant, alors que cela aurait fonctionné "comme il faut" avec le PreparedStatement.
    Pour le Reader, je prend note
    Le "insert", c'est certain qu'il réalise les insertions comme il faut dans la base. Cela dit, je corrigerai.

    Je verrai pour le prepare Statement quand j'aurais le code sous les yeux. Ca peut venir de là.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Bonjour !
    Désolé de ne répondre qu'aujourd'hui, une soutenance et de courtes vacances se sont intercallées
    Je te remercie !
    J'ai vu un exemple de preparedStatement sous Postgres. Donc ca semble ok. J'ignorais son existance.
    Je vois le principe et vais pouvoir le mettre à profit

    Encore merci !

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

Discussions similaires

  1. [AC-2007] Relation 1-plusieurs dans relations mais pas dans requête
    Par Lyysis dans le forum Modélisation
    Réponses: 13
    Dernier message: 24/07/2013, 08h13
  2. comment exécuter plusieurs requêtes ensemble avec Pentaho
    Par bfelicien2000 dans le forum Pentaho
    Réponses: 0
    Dernier message: 01/12/2010, 17h31
  3. [ODBC] Requêtes Access qui ne passent pas
    Par papaetoo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/08/2008, 16h04
  4. plusieurs requêtes à la suite ça ne marche pas
    Par zouhenlai dans le forum Access
    Réponses: 10
    Dernier message: 30/06/2006, 17h02
  5. [JDBC] Faire plusieurs requète
    Par picomz dans le forum JDBC
    Réponses: 9
    Dernier message: 25/05/2005, 14h33

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