[JDBC/Procédure stockée] Curseur "forward-only", j'en veux pas!

Curseur "forward-only", j'en veux pas! [JDBC/Procédure stockée] - SQL/NoSQL - Programmation

Marsh Posté le 29-05-2008 à 00:24:23    

Bonjour,
 
Je suis nouveau dans le monde des procédures stockées. Je travail présentement sur un travail en Java avec JDBC/Oracle.
 
J'ai fait une fonction retournant (normalement) un ResultSet contenant le "SELECT *" et sur mon prepareCall, je ne passe pas un ResultSet.FORWARD-ONLY, ce qui devrait pouvoir me permettre d'aller en avant comme en arrière dans mon ResultSet. Pourtant, ça plante à la moindre occasion (isLast, isFirst, next, previous). Bon, en fait je ne sais pas si c'est un problème Java ou PL/SQL. Mais voici tout de même le code de ma fonction dans son package.
 

Code :
  1. CREATE OR REPLACE PACKAGE Carnet IS
  2. TYPE Calepin IS REF CURSOR RETURN carnet2%ROWTYPE;
  3. FUNCTION selectCarnet (vNom VARCHAR2) RETURN Calepin;
  4. [...]
  5. END;
  6. /
  7. CREATE OR REPLACE PACKAGE BODY Carnet IS
  8. --
  9. -- select
  10. --
  11. FUNCTION selectCarnet (vNom VARCHAR2) RETURN Calepin IS
  12.  AdBook    Calepin;
  13. BEGIN
  14.  OPEN AdBook FOR SELECT NoCarnet, Nom, Prenom, Adresse, Ville, CodePostal, Province, Courriel, Telephone, Telecopieur, Photo FROM carnet2 WHERE Nom LIKE vNom||'%' ORDER BY Nom;
  15.  RETURN AdBook;
  16. END selectCarnet;
  17. [...]
  18. END;
  19. /
  20. SHOW ERRORS;
  21. /


 
Est-ce que quelqu'un voit pourquoi mon curseur serait "forward-only"?
 
Au cas où voici le code qui fait appel au SELECT :

Code :
  1. public ResultSet requeteCarnet (Connection connexion, String nom)
  2. {
  3.  try
  4.  {
  5.   CallableStatement cs = connexion.prepareCall("{?=call Carnet.selectCarnet(?)}", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
  6.   cs.registerOutParameter(1, OracleTypes.CURSOR);
  7.   cs.setString(2, nom);
  8.   cs.execute();
  9.   ResultSet rs = (ResultSet)cs.getObject(1);
  10.   if (rs.next())
  11.   {
  12.    System.out.println("ResultSet plein!" );
  13.    message = "Enregistrement trouvé!";
  14.    return rs;
  15.   }
  16.   else
  17.   {
  18.    System.out.println("ResultSet vide..." );
  19.    message = "Il n'y aucune enregistrement à ce nom";
  20.    return null; //retourne rien
  21.   }
  22.  }
  23.  catch (SQLException sqlex)
  24.  {
  25.   sqlex.printStackTrace();
  26.   System.out.println("pas de données" );
  27.   return null;
  28.  }
  29. }
  30. /* ==================================== */
  31. public ResultSet enregistrementSuivantCarnet (ResultSet rset)
  32. {
  33.  try
  34.  {
  35.   message = "";
  36.   if (!rset.isLast())
  37.   {
  38.    rset.next();
  39.    if (rset.isLast())//pour ne pas être nowhere
  40.    {
  41.     message = "Nous sommes à la fin";
  42.    }
  43.   }
  44.   else
  45.   {
  46.    message = "Nous sommes à la fin";
  47.   }
  48.   return rset;
  49.  }
  50.  catch (SQLException sqlex)
  51.  {
  52.   //System.out.println("Numéro d'erreur SQL : " + sqlex.getErrorCode());
  53.   //System.out.println("SQL Statement : " + sqlex.getSQLState());
  54.   sqlex.printStackTrace();
  55.   message = "Problème grave de recherche";
  56.   return null;
  57.  }
  58.  catch (Exception ex)
  59.  {
  60.   message = "Erreur innatendue et inconnue";
  61.   ex.printStackTrace();
  62.   return null;
  63.  }
  64. }


Merci à quiconque peut m'aider! :hello:

Reply

Marsh Posté le 29-05-2008 à 00:24:23   

Reply

Marsh Posté le 30-05-2008 à 18:43:10    

Changement de question, le débutant attaque!
 
Quoi faire pour éviter un curseur "forward-only" et ainsi pouvoir se promener vers l'avant et vers l'arrière dans ce curseur?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed