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 :

[ResultSet] problème sur updateRow


Sujet :

JDBC Java

  1. #1
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut [ResultSet] problème sur updateRow
    Bonjour,

    je ne dois pas être doué en recherche car je n'ai rien trouvé sur le forum

    voilà, j'ai un ResultSet créé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    j'y mets le résultats de ce Select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT BATCH_TRANSFER, BATCH_STATE, ...
    FROM transfer_wbs2 WHERE ...
    je parcours ce ResultSet et à chaque tour je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(set.hasNext()){
     // plein de trucs
     
      set.updateString("BATCH_STATE","F");
      set.updateRow();
     
    }

    et j'obtiens comme erreur :

    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
    java.sql.SQLException: ORA-00933: La commande SQL ne se termine pas correctement
    
    
            at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
            at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
            at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:582)
            at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1983)
            at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:
    877)
            at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.jav
    a:2513)
            at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStateme
    nt.java:2857)
            at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepar
    edStatement.java:608)
            at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePrepare
    dStatement.java:536)
            at oracle.jdbc.driver.ScrollableResultSet.refreshRowsInCache(ScrollableR
    esultSet.java:300)
            at oracle.jdbc.driver.UpdatableResultSet.execute_updateRow(UpdatableResu
    ltSet.java:2240)
            at oracle.jdbc.driver.UpdatableResultSet.updateRow(UpdatableResultSet.ja
    va:1369)
            at net.pcmo.Traitement.Interface_wbs.traitement_CA(Interface_wbs.java:56
    5)
            at net.pcmo.Traitement.Interface_wbs.construct_arbo(Interface_wbs.java:4
    10)
            at net.pcmo.Traitement.Interface_wbs.process(Interface_wbs.java:114)
            at net.pcmo.Traitement.Interface_wbs.main(Interface_wbs.java:1102)
    Comme c'est la première fois que je me sert de cette méthode, je ne sais pas trop quoi en penser. Qu'ai je fais de mal ?


    [EDIT] : ou alors ça vient de ma requete Select. Mais bon mon ami Toad me dis qu'elle est bonne ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Peut-on voir la requête? Ne manque-t-il pas un t à transfert?

    Par ailleurs, si je ne me trompe pas, dans certains cas, Java effectue un traitement du SQL pour qu'une requête fonctionne de la même manière sur tous les SGBD. Une requête utilisant une spécificité d'Oracle pourrait donc fonctionner sous Toad maos pas avec JDBC. A prendre au conditionnel.

  3. #3
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    voici la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT BATCH_TRANSFER, BATCH_STATE, BATCH_NUMBER,
    BATCH_INDEX, PROG_NUMBER, TASK_TYPE, TASK_NUMBER,
    TASK_NAME, TASK_PARENT_NUMBER,
    TASK_MANAGER, TASK_START_DATE, TASK_END_DATE,
    TASK_CHARGEABLE,nvl(TASK_EAC_BUDGET,0) TASK_EAC_BUDGET,
    CURRENCY, WORK_COMPLETE_METHOD 
     
    FROM transfer_wbs2 
     
    WHERE TASK_TYPE='CA' 
    AND BATCH_STATE = 'W'
    ORDER BY NVL(TASK_PARENT_NUMBER,'') DESC
    mais je pense qu'elle est correcte puisque dans mon while je récupère les valeurs de toutes les colonnes ...


    [EDIT] j'ai essayé de rendre ça lisible mais bon ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Il y a des SGBD (je ne sais pas si c'est le cas d'Oracle) qui n'aiment pas du tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY NVL(TASK_PARENT_NUMBER,'') DESC
    Ca a l'air bon, mais ils ne veulent pas faire de calcul dans une clause order by. Il faut créer une nouvelle colonne qui contient cette valeur, lui donner un alias, puis trier d'après cette colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select ... NVL(TASK_PARENT_NUMBER,'') as NVL_TASK_PARENT_NUMBER ...
    ...
    Order By NVL_TASK_PARENT_NUMBER Desc
    Voilà, si ça marche, revenez nous le dire. Si ça explose, je n'offre aucune garantie...

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    je crois que j'ai trouvé mais j'ai besoin de vous pour régler le pb :

    voici le bout de code simplifié :

    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
    traitement_CA(){
     
           trace("Parcours de la liste des WBS ->"+getNbResultats(set)+" enregistrements.");  //affiche 2
     
           while(set.next()){
                  trace("Traitement WBS n°"+ set.getRow());    //affiche 2 au premier tour
                  // ici le updateRow()
           }
    }//traitement_CA
     
     
     
     
           /**
             * @param set le ResultSet
             * @return le nombre de ligne d'un ResultSet
             */
    	private int getNbResultats(ResultSet set) {
    		if(set != null){
    			int res = 0;
    			try {
    				set.last();
    				res = set.getRow();
    				set.first();
     
    			} catch (SQLException e) {
    				log.error("Unable to count number of results.");
    				trace("Pb getNbResultats -> "+e.getMessage());
    				e.printStackTrace();
    			}
    			return res;
    		} else 
    			return 0;
    	}//getNbResultats
    du coup je pense qu'il y a un pb de curseur. Meme si le message d'erreur n'indique pas ça ...

    qu'en pensez vous ?


    [EDIT] Désolé, ça c'est réglé, fallait un beforeFirst(). Mais bon ça ne change pas le pb ....
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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