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 requêtes imbriquées


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 42
    Par défaut jdbc requêtes imbriquées
    Bonjour à Tous

    J'ai poser ma question sur le forum Python (je vais la retirer) .
    En creusant un peu mon problème, je me suis apperçu
    que cela ne venais pas de jython mais de JDBC c'est pour cela que j'ai décidé de vous demander un coup de main.

    voilà mon problème

    j'ai 2 tables TAB1, et TAB2.
    je lance une première requête sur TAB1, et avec la ligne de résultat retournée j'en lance une autre sur TAB2

    voilà un extarit de mon code

    je définis ma fonction comme ceci:

    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
    def rqt2(tab1, tab2):
     
    	sql2 = 'SELECT  S1 , S2,S3 ,S4 ,S5  FROM  TAB2 where S1 = %i and S3 = %i   ' %(tab1,tab2)
    	rs2 = stmt.executeQuery(sql2)
     
    	while (rs2.next()):
    		row2={}
    		row2['AG']=rs2.getInt(1)
    		row2['Ra']=rs2.getString(2)
    		row2['Co']=rs2.getString(3)
    		row2['Dte']=rs2.getString(4)
    		row2['Num_R']=rs2.getString(5)
     
    		EX.append(row2)
    		rs2.close()
     
    Puis ma fonction principal comme ça
     
    # load DB2 JDBC type 2 driver (app driver)
    Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance()
    con = DriverManager.getConnection( 'jdbc:as400://10.33.XX.XX','login','pass')
     
    stmt = con.createStatement()
     
     
    sql1='select * from TAB1' 
     
    rs = stmt.executeQuery(sql1)
     
    employeeList=[]
    while (rs.next()):
    	row={}
    	row['AGI']=rs.getInt(1)
    	row['DEF']=rs.getInt(2)
    	row['WXS']=rs.getString(3)
    	employeeList.append(row)
    	rqt2(row['S1'],row['S3'])
     
    rs.close()
    les 2 fonctions fonctionneent séparémment , pas de problème.
    Mais en les combinant , la fonction rqt2 ne tourne qu'une fois,
    et j'ai des erreurs JDBC dont je vous livre
    le contenu.
    Traceback (most recent call last):
    File "selectT.py", line 76, in <module>
    while (rs.next()):
    at com.ibm.as400.access.JDError.throwSQLException(JDError.java:385)
    at com.ibm.as400.access.JDError.throwSQLException(JDError.java:362)
    at com.ibm.as400.access.AS400JDBCResultSet.checkOpen(AS400JDBCResultSet.
    java:371)
    at com.ibm.as400.access.AS400JDBCResultSet.beforePositioning(AS400JDBCRe
    sultSet.java:1243)
    at com.ibm.as400.access.AS400JDBCResultSet.next(AS400JDBCResultSet.java:
    1776)
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)

    java.sql.SQLException: java.sql.SQLException: Cursor

    à mon avis le soucis se trouve ici while (rs2.next()) et ici rs2.close()
    ou alors , dois je lever une exeption avec rs2.last().

    là je dois dire que je sèche un peu....

    dois je utiliser la méthode getMoreResults()?

    Pourriez vous donner un coup de main à un pauvre novice s'il vous plait?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 42
    Par défaut
    ouuffffffff
    j'ai lu la doc jdbc et j'ai trouvé mon errreur
    si cela peut un jour aider quelqu'un:
    voila pour faire ce type de traitement
    il faut pour chaque resultatset un statement

    stmt = con.createStatement()
    stmt2 = con.createStatement()
    ainsi la suite devient:

    rs = stmt.executeQuery(sql1)
    rs2 = stmt2.executeQuery(sql2)

    voili voila ça marche
    je vais gerer mes exeption maintenant

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

Discussions similaires

  1. Pb requête imbriquée
    Par ddams dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/04/2004, 12h13
  2. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 22h52
  3. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  4. Requêtes imbriquées ?
    Par Ph. B. dans le forum XMLRAD
    Réponses: 7
    Dernier message: 06/05/2003, 13h19
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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