Hallo zusammen,
ich führe eine Suchabfrage durch, welche die DB nach verschiedenen Parametern durchsucht, bis hierhin ganz einfach. Allerdings möchte ich als weiteren Parameter gleiche Aktivitäten vergleichen (Werden über ein seperates Checkbox-Fenster in einem String-Array des Nutzers gespeichert). Nun ist meine Frage, wie so eine Abfrage aussehen könnte, ich habe da echt keine Idee, außer über zig if und else Abfragen.
Anbei die Klasse Suchanfrage (ansonsten sind noch getter- und setter-, sowie toString-Methoden drin, hab ich mir erspart):
sowie die Methode "suchen" in der DB-Klasse:
Zudem eine kleine 2. Frage zum unteren Code: Ich bekomme der Abfrage entsprechende Ergebnisse ausgegeben, jedoch bekomme ich pro Ausführung die Ergebnisse öfter angezeigt, d.h. bei der ersten Ausführung einmal alle Ergebnisse, beim zweiten Mal zwei Mal alle Ergebnisse usw.
Hat da jemand eine Lösung?
Gruß
ich führe eine Suchabfrage durch, welche die DB nach verschiedenen Parametern durchsucht, bis hierhin ganz einfach. Allerdings möchte ich als weiteren Parameter gleiche Aktivitäten vergleichen (Werden über ein seperates Checkbox-Fenster in einem String-Array des Nutzers gespeichert). Nun ist meine Frage, wie so eine Abfrage aussehen könnte, ich habe da echt keine Idee, außer über zig if und else Abfragen.
Anbei die Klasse Suchanfrage (ansonsten sind noch getter- und setter-, sowie toString-Methoden drin, hab ich mir erspart):
Java:
public class Suchanfrage
{
//Attribute
private int parameterAlterMinimum;
private int parameterAlterMaximum;
private String parameterGeschlecht;
private String parameterIchKann;
private String parameterIchLerne;
private String [] parameterFreizeitaktivitäten;
private Nutzer [] suchergebnisse;
//Konstruktor
public Suchanfrage(int parameterAlterMinimum, int parameterAlterMaximum, String parameterGeschlecht,
String parameterIchKann, String parameterIchLerne, String[] parameterFreizeitaktivitäten,
Nutzer[] suchergebnisse)
{
this.parameterAlterMinimum = parameterAlterMinimum;
this.parameterAlterMaximum = parameterAlterMaximum;
this.parameterGeschlecht = parameterGeschlecht;
this.parameterIchKann = parameterIchKann;
this.parameterIchLerne = parameterIchLerne;
this.parameterFreizeitaktivitäten = parameterFreizeitaktivitäten;
this.suchergebnisse = suchergebnisse;
}
sowie die Methode "suchen" in der DB-Klasse:
Java:
public Suchanfrage suchen(Suchanfrage s){
try{
con.setReadOnly(true);
stmt = con.createStatement();
ResultSet rs;
if(s.getParameterGeschlecht() == "egal")
{
rs = stmt.executeQuery("SELECT * FROM nutzer WHERE ichWillLernen LIKE UPPER('"+s.getParameterIchKann()+
"') AND ichSpreche LIKE UPPER('"+s.getParameterIchLerne()+"') ");
}
else
{
rs = stmt.executeQuery("SELECT * FROM nutzer WHERE ichWillLernen LIKE UPPER('"+s.getParameterIchKann()+
"') AND ichSpreche LIKE UPPER('"+s.getParameterIchLerne()+"') AND geschlecht LIKE UPPER ('"+s.getParameterGeschlecht()+"')");
}
int countResults = 0;
Nutzer [] results = new Nutzer [s.getSuchergebnisse().length];
int i = 0;
while(rs.next())
{
String datum = rs.getString(5);
String[] zahlenString = datum.split("\\.");
int tag=Integer.parseInt(zahlenString[0]);
int monat=Integer.parseInt(zahlenString[1]);
int jahr=Integer.parseInt(zahlenString[2]);
if(new Datum(tag,monat,jahr).DatumToAlter() >= s.getParameterAlterMinimum() && new Datum(tag,monat,jahr).DatumToAlter() <= s.getParameterAlterMaximum())
{
results[i] = new Nutzer(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),
new Datum(tag,monat,jahr),rs.getString(6), rs.getString(7),rs.getString(8),
rs.getString(9).split(","),rs.getString(10),null,null,null);
countResults ++;
i++;
}
}
s.setSuchergebnisse(results);
if(countResults == 1)
{
System.out.println("Es wurde " + countResults + " passender Eintrag gefunden!");
}
else
{
System.out.println("Es wurden " + countResults + " passende Einträge gefunden!");
}
for(int j = 0; j<s.getSuchergebnisse().length && s.getSuchergebnisse()[j] != null; j++)
{
System.out.println(s.getSuchergebnisse()[j]);
}
rs.close();
stmt.close();
con.close();
return s;
}catch(Exception e){
System.out.println("****Fehlermeldung**** ->"+e);
return null;
}
}
Zudem eine kleine 2. Frage zum unteren Code: Ich bekomme der Abfrage entsprechende Ergebnisse ausgegeben, jedoch bekomme ich pro Ausführung die Ergebnisse öfter angezeigt, d.h. bei der ersten Ausführung einmal alle Ergebnisse, beim zweiten Mal zwei Mal alle Ergebnisse usw.
Hat da jemand eine Lösung?
Gruß
Zuletzt bearbeitet: