0
votes

Comment effectuer une requête SELECT sur les résultatsset d'une autre requête SELECT en Java

Ceci est le code où j'essaie d'exécuter une seconde requête sur le "code> résultatsset code> de ma première interrogation longue. J'ai besoin de télécharger ceci données quelque part.

Est-ce la bonne chose à faire? p>

ou y a-t-il une meilleure approche à distance d'interroger la base de données? P>

 public String createQuery() throws SQLException {
     StringBuilder Query = new StringBuilder();
     try {
        Query.append(" SELECT ...... ")
       } catch (Exception e) {
        e.printStackTrace();
    }
    return Query.toString();
}
 private void openPreparedStatements() throws SQLException {
    myQuery = createQuery();      
    try {
        QueryStatement = dbConnection.prepareStatement(myQuery);
    } catch (SQLException e) {
        e.printStackTrace();
        return;
    }
}
public ResultSet selectData(String timestamp) throws SQLException {
    openConnection();
    ResultSet result = null;
    ResultSet rs_new=null;
    try {
        result = QueryStatement.executeQuery();
        while (result.next()) {
           String query = "SELECT * FROM " + result + " WHERE " + "ID" + " =" + "ABC";
            rs_new =QueryStatementNew.executeQuery(query);
            System.out.print(rs_new);
        }
    } catch (SQLException e) {
        LOGGER.info("Exception", e);
    }

    return result;
}


4 commentaires

Vous devez nier ce code avec votre code de résultatsset.


J'ai lu que cette approche ne convient pas du tout, avez-vous une idée pourquoi?


Veuillez partager des extraits de code détaillés pour avoir une idée précise de votre mise en œuvre.


Mise à jour du code complet


3 Réponses :


1
votes

Au lieu d'exécuter deux requêtes distinctes (lorsque vous n'avez pas besoin de l'intermédiaire), vous pouvez les combiner.

Par exemple, vous pouvez faire: P>

SELECT *
FROM (
  -- first query here
) x
WHERE ID = 'ABC'


3 commentaires

J'ai besoin de deux retranset différents comme j'ai besoin d'envoyer le premier à FTP et deuxième à élastic.


Alors la réponse est non. Vous demandez à matérialiser un ensemble de résultats, puis utilisez-le pour exécuter une deuxième requête. DB2 (et la plupart des bases de données) Ne fonctionnent pas de cette façon si vous exécutez la requête composite (comme celle-ci) à des fins d'efficacité, le moteur ne matérialisera pas la première requête, mais Pipeline . Vous devrez exécuter les deux requêtes séparément.


Y a-t-il une raison pour laquelle nous ne pouvons pas faire cela? Toute documentation? Pls laissez-moi savoir



0
votes

Make DB2 Gardez votre résultat intermédiaire défini dans une table temporaire globale, si vous avez la possibilité de l'utiliser, et que vous appliquez une même session de connexion de base de données.

DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_RES AS 
(
SELECT ID, ... -- Your first lengthy query text goes here
) WITH DATA WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;


0 commentaires

1
votes

Vous ne pouvez pas utiliser deux objets d'instruction dans une connexion de base de données. Vous pouvez donc ouvrir une autre connexion de base de données et exécuter la deuxième instruction de la 2e connexion, ou itérer via les Resultats à partir de la première instruction et stocker la valeur dont vous avez besoin (par exemple dans un tableau / collection), puis fermez cette déclaration et exécutez le second, Cette fois, récupérant la valeur du tableau / la collection que vous l'avez sauvegée. Reportez-vous à Java générant des requêtes de Resultset et exécutant la nouvelle requête


0 commentaires