none
Comment récupérer les valeurs dans une requête RRS feed

  • Question

  • Bonjour
    J'ai maintenant une couche driver qui marche, je travaille sur la couche de plus haut niveau et j'ai une question à ce sujet:
    Dans un premier temps je vous net le code:

    		   pListText = new ArrayList<Structure.ElementWork>();
    		   String cmd = "SELECT siIdDocument, vcDocument FROM T_WORK_INFORMATION WHERE siIdStateDocument = 3";
    		   iNbResultFound = 0;
    		   iNbResultFound = InterbaseManager.ExecuteSelectRequest( cmd);
    		   try
    		   {
    			   while( InterbaseManager.myReader.next());
    			   {
    				   WorkElement.Id = InterbaseManager.myReader.getInt( 0);
    				   WorkElement.wsText = InterbaseManager.myReader.getString( 1);
    				   pListText.add(WorkElement);
    			   }
    		   }
    		   catch(Exception ex)
    		   {
    			   ex.printStackTrace();
    		   }

    puis le message d'erreur:

    java.sql.SQLException: [Microsoft][Gestionnaire de pilotes ODBC] Index de descripteur non valide
    	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    	at com.all4tec.matelo.linguistique.wizards.MissionDatabaseManager.ReadWork(MissionDatabaseManager.java:81)
    	at com.all4tec.matelo.linguistique.wizards.LinguistiqueimportWizard.RecupereNomDesFichier(LinguistiqueImportWizard.java:61)
    	at com.all4tec.matelo.linguistique.wizards.LinguistiqueimportWizard$1.run(LinguistiqueImportWizard.java:87)
    	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

    Je vous demande comment adresser les champs dans la boucle while du code.
    J'ai essayé dans un premier temps de partir à 1 puis j'ai essayé de partir à 0
    Quand on compte à partir de 1 on récupère:

    java.sql.SQLException: [Microsoft][Gestionnaire de pilotes ODBC] État de curseur non valide

    à Noter que dans la base siIdDocument est le premier enregistrement et vcDocument est le deuxième

    voici le dernier source:

                                       String nom;
    				   nom = "siIdDocument";
    				   int index = InterbaseManager.myReader.findColumn(nom);
    				   WorkElement = new Structure.ElementWork();
    				   WorkElement.Id = InterbaseManager.myReader.getInt( index);
    				   index++;
    				   WorkElement.wsText = InterbaseManager.myReader.getString( index);
    				   pListText.add( WorkElement);
    				   iNbResultFound--;
    			   }
    Je me demande si on ne doit pas typer int index  dans un type plus spécialisé?

    Celui qui m'aidera sera


    Jean Noël Martin




    jeudi 23 avril 2015 08:03

Réponses

  • Finalement le code qui marche est celui-ci

    		   pListText = new ArrayList<Structure.ElementWork>();
    		   String cmd = "SELECT iIdDoc, vcDocument FROM T_WORK_INFORMATION WHERE siIdStateDocument = 3";
    		   ResultSet resultset = InterbaseManager.ExecuteSelectRequest( cmd);
    		   ResultSetMetaData rsmd = resultset.getMetaData();
    		   iNbResultFound = 0;
    		   try 
    		   {
    			   while( resultset.next())
    			   {
    				    iNbResultFound++;
    				    WorkElement = new Structure.ElementWork();
    					WorkElement.Id = resultset.getInt( "iIdDoc");
    					WorkElement.wsText = resultset.getString( "vcDocument");
    					pListText.add( WorkElement);
    				}
    		   }
    		   catch( SQLException ex)
    		   {
    			   ex.printStackTrace();
    		   }
    		   return( pListText);
    

    On s'est affranchi du champ identity en lui préférant le champ iIdDoc


    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mercredi 6 mai 2015 09:36
    mercredi 6 mai 2015 09:36

Toutes les réponses

  • Jai mis beaucoup de mise à jour dans ce thread. Je voudrais savoir ce qui manque dans ce thread pour répondre.J'y met au passage le code réactualisé

                       int iNbResultFound;
    		   pListText = new ArrayList<Structure.ElementWork>();
    		   String cmd = "SELECT siIdDocument, vcDocument FROM T_WORK_INFORMATION WHERE siIdStateDocument = 3";
    		   iNbResultFound = 0;
    		   iNbResultFound = InterbaseManager.ExecuteSelectRequest( cmd);
    		   ResultSetMetaData metadata = InterbaseManager.myReader.getMetaData();
    		   int typeSQL = metadata.getColumnType( 1);
    		   String nomTypeSQL = metadata.getColumnTypeName( 1);
    		   String typeJava = metadata.getColumnClassName( 1);
    		   try
    		   {
    			   while( InterbaseManager.myReader.next()&& iNbResultFound > 0);
    			   {
    				   java.lang.Integer index = InterbaseManager.myReader.findColumn( "siIdDocument");
    				   WorkElement = new Structure.ElementWork();
    				   int id =  InterbaseManager.myReader.getInt( "siIdDocument");
    				   String str = InterbaseManager.myReader.getString( "vcDocument");
    				   WorkElement.Id = id;
    				   WorkElement.wsText = str;
    				   pListText.add( WorkElement);
    				   iNbResultFound--;
    			   }
    		   }
    		   catch( Exception ex)
    		   {
    			   ex.printStackTrace();
    			}


    Jean Noël Martin


    vendredi 24 avril 2015 08:31
  • Finalement le code qui marche est celui-ci

    		   pListText = new ArrayList<Structure.ElementWork>();
    		   String cmd = "SELECT iIdDoc, vcDocument FROM T_WORK_INFORMATION WHERE siIdStateDocument = 3";
    		   ResultSet resultset = InterbaseManager.ExecuteSelectRequest( cmd);
    		   ResultSetMetaData rsmd = resultset.getMetaData();
    		   iNbResultFound = 0;
    		   try 
    		   {
    			   while( resultset.next())
    			   {
    				    iNbResultFound++;
    				    WorkElement = new Structure.ElementWork();
    					WorkElement.Id = resultset.getInt( "iIdDoc");
    					WorkElement.wsText = resultset.getString( "vcDocument");
    					pListText.add( WorkElement);
    				}
    		   }
    		   catch( SQLException ex)
    		   {
    			   ex.printStackTrace();
    		   }
    		   return( pListText);
    

    On s'est affranchi du champ identity en lui préférant le champ iIdDoc


    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mercredi 6 mai 2015 09:36
    mercredi 6 mai 2015 09:36