MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten

Llois41

Mitglied
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):
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:

Thallius

Top Contributor
Sorry aber ich verstehe überhaupt nicht was Du machen willst. Was sind denn gleiche Aktivitäten?

Weiterhin ist dein Code echt nicht der Hit.

Code:
rs = stmt.executeQuery("SELECT * FROM nutzer WHERE ichWillLernen LIKE UPPER('"+s.getParameterIchKann()+
                    "') AND ichSpreche LIKE UPPER('"+s.getParameterIchLerne()+"') ");

wieso heist der Parameter für ichWillLernen IchKann und der deer Parameter für ichSpreche IchLerne? Das ist vollkommen paradox.
Weiterhin macht man kein select *
Wenn du nur die Anzahl haben willst, dann kannst du auch einfach SELECT COUNT(*) von machen und must nicht alle Daten lesen.
Warum zwei total unterschiedliche Queries nur weil du beim zweiten eine weitere Bedingunge hinzufügst?
Erstelle einen Query String

String query = "blahblahblah" und wenn du weitere bedingungen hast, dann häng sie halt hinten dran
query += "AND blahblahblah";

Im großen und Ganzen kannst Du Dir mindestens 50% Deines Codes sparen.

Gruß

Claus
 

Llois41

Mitglied
Jeder Nutzer kann Freizeitaktivitäten per Checkbox auswählen, welche wie gesagt in einem String-Array jedes Nutzers gespeichert werden, wobei je nach Auswahl unterschiedliche Stellen und eine unterschiedliche Anzahl an Freizeitaktivitäten drinstehen, mind. jedoch eine. Und ich habe leider keine Idee, die beiden Arrays miteinander in einer Query abzufragen, da mind. eine Freizeitaktivität gleich sein soll, um als "passend" zu gelten.

IchSpreche und IchLerne gehören so zusammen, weil der suchende Nutzer das Lernen will, was der gesuchte können soll und andersrum.
Weiterhin macht man kein select *
Wenn du nur die Anzahl haben willst, dann kannst du auch einfach SELECT COUNT(*) von machen und must nicht alle Daten lesen.
Ich möchte ja nicht nur die Anzahl, sondern auch die Daten haben, aus welchen dann ein neuer Nutzer erstellt wird.

Mit dem String versuch ich das mal, danke!

Gruß
 

Thallius

Top Contributor
Wenn Du die Freizeitaktivitäten in einem String speicherst dann hast du eh verloren.

Bitte lies dich erst einmal ein die Dantebank normalisierung ein. Das ist zwar etwas trocken aber nur wenn du das verstanden, verinnerlicht und angewendet hast, wirst du langfristig zu einem Ziel kommen. Ansonsten wirst Du immer irgendwie was zurecht fuschen das sich dann beim nächsten Feature rächt. Ausserdem wird es immer langsamer und langsamer.

Lies dir das sorgfältig durch, verstehe es und baue deine ganze Datenbank so um, dass sie dem entspricht. Dann helfe ich gerne weiter.

https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C zwei Strings vergleichen Datenbankprogrammierung 13
L CSV Datei mit DB Inhalt vergleichen Datenbankprogrammierung 20
S MySQL Datenbankabfrage mit Eingabe aus Textfeld vergleichen Datenbankprogrammierung 4
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
C Datenbankeinträge vergleichen Datenbankprogrammierung 16
V SQLite 2 Tabelle vergleichen und alle unterschiede rausgeben Datenbankprogrammierung 1
V SQLite 2 Tabellen vergleichen und nur Unterschiedliche Sätze rausgeben. Datenbankprogrammierung 31
Paul15 Tabelle vergleichen Datenbankprogrammierung 15
ruutaiokwu sql server 2008 stored procedures automatisiert vergleichen Datenbankprogrammierung 2
P Listen Vergleichen JPA Criteria Datenbankprogrammierung 2
K Zwei Datenbanken miteinander auf Unterschiede vergleichen Datenbankprogrammierung 2
T 2 Tabellen aus 2 Datenbanken miteinander vergleichen Datenbankprogrammierung 6
H Oracle Datumsformat vergleichen Datenbankprogrammierung 13
I DB-Zelleninhalt mit String vergleichen klappt nicht Datenbankprogrammierung 3
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
N Zwei Spalten und Ihre Werte vergleichen Datenbankprogrammierung 3
M Strings vergleichen Datenbankprogrammierung 8
E Vergleichen von datetime mit GregorianCalender-Werte Datenbankprogrammierung 6
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
W MySQL DB Abfrage in Array, gemischte Array, generelles vorgehen Datenbankprogrammierung 4
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
S MongoDB - Abfrageergebnis in Array speichern Datenbankprogrammierung 2
V Datenbankwerte in Array einfügen Datenbankprogrammierung 1
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
A Oracle insert Array in DB Datenbankprogrammierung 7
J SQL SELECT mit einem Array Datenbankprogrammierung 1
M byte-Array in Datenbank speichern Datenbankprogrammierung 2
N String Array in While Schleife befüllen Datenbankprogrammierung 2
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
H JSON Array abfrage beschleunigen Datenbankprogrammierung 2
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
M Problem Array in BLOB-Feld in DerbyDB zu speichern Datenbankprogrammierung 5
N Ergebnisse von exectueQuery als Array ausgeben Datenbankprogrammierung 2
S Matrix vom Typ Double aus .txt lesen und in ein Array speich Datenbankprogrammierung 3
S PreparedStatement setArray(int i, java.sql.Array) Datenbankprogrammierung 17
D String[][] Array in Access Datenbank speichern Datenbankprogrammierung 5
A SQL Datenbankabfrage in Array speichern Datenbankprogrammierung 3
K Ergebnis aus SQL Abfrage in Array speichern Datenbankprogrammierung 3
B double Array in MySQL Datenbank speichern/laden Datenbankprogrammierung 12
L DB Felder in einem Array speichern und wieder auslesen Datenbankprogrammierung 11
V Daten aus Tabelle in einen Array Datenbankprogrammierung 4
L Array / Bitset in Mysql-DB speichern Datenbankprogrammierung 3
K Weiterverarbeitung der DB-Daten...Array...Vector...??? Datenbankprogrammierung 3
T Aus einem Array in Datenbank einlesen? Datenbankprogrammierung 3
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
L Tabelle mit Inhalt füllen Datenbankprogrammierung 2
I Inhalt einer hsqldb anzeigen Datenbankprogrammierung 1
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
N MySQL MYSQL Inhalt an JTable übergeben. Datenbankprogrammierung 11
B MySQL Zwischenspeichern von DB-Inhalt Datenbankprogrammierung 8
A Wie Tabelle auf bestimmten Inhalt überprüfen? Datenbankprogrammierung 7
T Inhalt einer Datenbanktabelle autom. in XML ausgeben Datenbankprogrammierung 7
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
M Gelöst: JavaDB - Derby Inhalt in Jar Datei speichern Datenbankprogrammierung 5
G Inhalt eine Clob Feldes zw. zwei DB's kopieren Datenbankprogrammierung 2
T Inhalt von Blob in Console ausgeben Datenbankprogrammierung 2
P Inhalt einer Variable in Datenbank schreiben Datenbankprogrammierung 13
V DB-Inhalt in JTable Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben