2 SQL Abfragen in einer Methode verwenden

Nabend,

folgendes Problem in meinem Programm werden 2 SQL Abfragen druchgeführt welche nachher in der unteren Methode verarbeitet werden. EIne Datenbankabfrage steht schon drin (getWordAnalyse). Aus der 2. Datenbnakabfrage benötige ich aber auch einen Wert der in der for schleife verarbeitet werden soll. Gibt es eine Lösung das ich die 2. Datenbankabfrage einbinde? Also da nachher unter

  double weight = Double.parseDouble(objects[2].toString());```

dann

```int Freq = Integer.parseInt(objects[x].toString());```

steht?

```public static String getWeight(String word) {
   List<Object[]> dbResult = getWordAnalyse(word);
   
   int counter = 0;
   double weights = 0.0;
   
   for (Object[] objects : dbResult) {
      int coocFreq = Integer.parseInt(objects[1].toString());
      double weight = Double.parseDouble(objects[2].toString());
      weights += coocFreq * weight;
      counter += coocFreq;
   }
   double result = weights / counter;
   return ergebnisTextErmitteln(result);
}```



Das gesamte Programm...

```public static String getWeight(String word) {
   List<Object[]> dbResult = getWordAnalyse(word);
   
   int counter = 0;
   double weights = 0.0;
   
   for (Object[] objects : dbResult) {
      int coocFreq = Integer.parseInt(objects[1].toString());
      double weight = Double.parseDouble(objects[2].toString());
      weights += coocFreq * weight;
      counter += coocFreq;
   }
   double result = weights / counter;
   return ergebnisTextErmitteln(result);
}


private static List<Object[]> getWordAnalyse(String word) {
   return DatabaseAccess
   .getSqlStatementResult(
   "SELECT coocTable.word, coocFreq, value"
   + " FROM ( "
   + " SELECT word, "
   + " count(DISTINCT sentence.id) AS coocFreq"
   + " FROM "
   + " corpus "
   + " INNER JOIN "
   + " article ON corpus.id = article.corpusId "
   + " INNER JOIN "
   + " sentence ON article.id = sentence.articleId "
   + " INNER JOIN "
   + " term ON sentence.id = term.sentenceId "
   + " WHERE corpus.id = " + currentCorpus.getId()
   + " AND sentence.id IN "
   + " (SELECT sentence.id "
   + " FROM "
   + " sentence "
   + " INNER JOIN "
   + " term ON sentence.id = term.sentenceId "
   + " WHERE word = '" + word + "' "
   + " ) GROUP BY word "
   + " ORDER BY coocFreq DESC) "
   + "AS coocTable "
   + "INNER JOIN sentiws on coocTable.word = sentiws.word");
}


private static List<Object[]> getCorpusStatstic(String corpus) {
   return DatabaseAccess.getSqlStatementResult(
   "SELECT word, count(DISTINCT sentence.id) AS freq, count(DISTINCT article.id) AS art " +
   "FROM " +
   " corpus" +
   " INNER JOIN" +
   " article ON corpus.id = article.corpusId" +
   " INNER JOIN" +
   " sentence ON article.id = sentence.articleId" +
   " INNER JOIN" +
   " term ON sentence.id = term.sentenceId " +
   "WHERE corpus.id = " + corpus.getId() +
   " GROUP BY word " +
   "ORDER BY freq DESC;"
   );
}```


Ich hoffe ihr könnte mir helfen ich verzweifle.

VIele Grüße,
Tobias

du kannst beide Queries ausführen, dann zwei unterschiedlich benannte Listen vorliegen haben:

public static String getWeight(String word) {
  List<Object[]> wordList = getWordAnalyse(word);
  List<Object[]> corpusList = getCorpusStatstic(?);

was du mit
int Freq = Integer.parseInt(objects[x].toString());
dazu meist ist nicht zu verstehen,

allgemein kann man sich vorstellen, dass du eine Liste lieber mit for-Index-Schleife durchläufst,
dann kannst du auch auf das Element am gleichen Index in der anderen Liste zugreifen

oder komplizierter die zusammengehörigen Daten finden

oder auch die zweite Query in der Schleife für jedes Wort neu ausführen,
was immer nötig ist, grundsätzlich geht erst mal alles

ich würde versuchen aus beiden Queries eine zu machen, die dann auch die Felder aus der 2. Query enthält.

bye
TT