0
votes

Évitez d'exécuter une requête DB en boucle

J'ai une table comme ci-dessous,

select startTime, endTime from myTable where parent_id = ? and process_name=?


2 commentaires

Parent_ID est-il stocké dans une table? Si oui, vous pouvez effectuer une jointure.


Pourquoi tu as besoin de boucle? Vous pouvez simplement filtrer par PROCESS_NAME


4 Réponses :


0
votes

Ce n'est pas une bonne pratique d'exécuter une requête dans une boucle. Au lieu de cela, pourquoi n'apprenez-vous pas tous les enregistrements appartenant à un processus donné à la fois. Peut-être utiliser la clause de groupeby pour le nom de process_name avec des fonctions agrégées sur d'autres colonnes [si vous devez effectuer quelque chose sur ces autres colonnes et évitez de faire via le code par vous-même] Une fois que vous avez tous les enregistrements à portée de main, le temps de départ et la durée de fin peuvent être utilisés pour votre traitement ultérieur.

espère que cela aide.


0 commentaires

0
votes

ne serait-il pas possible de simplement faire: xxx

et obtenir les valeurs pour tous les valeurs parent_id , puis filtrez ceux de votre liste arraychist après?


0 commentaires

2
votes

Il existe plusieurs approches pour résoudre ce problème:

  1. comme SVend suggéré, car vous avez déjà Process_Name , vous pouvez obtenir tous les temps de démarrage et de fin pour ce nom de processus.

  2. Une autre approche consiste à préparer une chaîne de parent_id s d'abord, puis interrogez-la à la base de données à l'aide d'une seule requête:

    code: xxx


3 commentaires

op veut éviter la boucle


@Zaynulabadintuhin, op ne veut pas dire qu'il ne veut pas faire de boucle du tout, il ne veut tout simplement pas faire une boucle de requêtes SQL


Je suppose que ce serait mieux en utilisant le formatage ? de Christian, car ce serait moins d'attaque d'injection ... Bien que cela ne soit pas trop important dans ce cas particulier, car nous contrôlons probablement Ce qui est dans la liste ...



0
votes

comme une légère variation de la solution de @ Prakhar-londhe, vous pouvez également utiliser des paramètres dans la clause dans comme dans xxx

, puis ajouter un paramètre pour chaque parent_id . Bien sûr, vous devez toujours assembler la requête (pour mettre un ? à l'intérieur des parenthèses pour chaque parent_id ) ainsi que la liste des paramètres dans une boucle.


0 commentaires