SQLite Datenbank durchsuchen mit mehreren Suchbegriffen

EatTheClock

Mitglied
Hallo ihr!

Ich versuche seit geraumer Zeit eine Suchfunktion zu schreiben, in der man mehrere Begriffe eingeben kann, getrennt mit einem Komma, und mir dann alle Zeilen der Datenbank ausgegeben werden, die mindestens einen eingegebenen Suchbegriff beinhalten. Einen einzelnen Begriff zu suchen ist kein Problem.

Java:
private void StartSearchTagsTextKeyPressed(java.awt.event.KeyEvent evt) {                                               
    if (evt.getKeyCode()==KeyEvent.VK_ENTER) {  
    try {
        String sql = "SELECT ID, Titel, Autor, Regal, Fach, Gelesen, Tags FROM TableDB WHERE UPPER(Tags) LIKE UPPER(?) ";  
        pst = conn.prepareStatement(sql);
        pst.setString (1, "%" +StartSearchTagsText.getText()+ "%");

        rs= pst.executeQuery ();
        StartTable.setModel (DbUtils.resultSetToTableModel(rs));
        pst.close();
        StartSearchTagsText.setText("");            
    } 
    catch (SQLException e) {
        JOptionPane.showMessageDialog (null, "searchtagskey");
    }
    }
}
 
Sorry, dass ich erst jetzt antworte.
Ich habe nach deinem Vorschlag im Internet gesucht, natürlich auch vieles gefunden, aber nichts möchte so richtig klappen. Könntest du mir vielleicht die Sache ein wenig genauer erklären?

Liebe Grüße
 
Bei der OR Variante habe ich folgendes versucht:

String Eingabe = "%" + StartSearchTagsText.getText() + "%";
String sql = "SELECT ID, Titel, Autor, Regal, Fach, Gelesen, Tags FROM TableDB WHERE UPPER(Tags) LIKE UPPER(Eingabe) OR LIKE UPPER (Eingabe) ";

jedoch wusste ich dann nicht wie ich folgende Zeile anpassen muss:
pst.setString (1, "%" +StartSearchTagsText.getText()+ "%");

Wie die weiteren Eingaben, die ja mit einem Komma getrennt werden sollen, dort berücksichtigt werden.
Und zur IN Variante habe ich für mich nichts passendes gefunden.

Gruß
 
Du must schon

WHERE UPPER(Tags) LIKE UPPER(?) OR UPPER(Tags) LIKE UPPER(?) schreiben und dann zwei zeilen mit setString(1,...) und setString(2,...) etc machen

Gruß

Claus
 
Habe ich versucht, funktioniert leider trotzdem nicht.

Java:
private void StartSearchTagsTextKeyPressed(java.awt.event.KeyEvent evt) {                                               
        if (evt.getKeyCode()==KeyEvent.VK_ENTER) {  
        try {
            String sql = "SELECT ID, Titel, Autor, Regal, Fach, Gelesen, Tags FROM TableDB WHERE UPPER(Tags) LIKE UPPER(?) OR  UPPER(Tags) LIKE UPPER(?)";  
            pst = conn.prepareStatement(sql);
            pst.setString (1, "%" + StartSearchTagsText.getText() + "%");
            pst.setString (2, "%" + StartSearchTagsText.getText() + "%");

        
            rs= pst.executeQuery ();
            StartTable.setModel (DbUtils.resultSetToTableModel(rs));
            pst.close();
            StartSearchTagsText.setText("");                    
        }
        catch (SQLException e) {
            JOptionPane.showMessageDialog (null, "searchtagskey");
        }
        }
    }

Ich habe viel von der .split() Funktion gelesen. Spielt das hier vielleicht auch eine Rolle?
 
Zuletzt bearbeitet:
Dein SQL Statement macht so keinen Sinn da du 2x die gleiche Bedingung abfragst und mit OR verknüpfst.

Was steht denn in der DB in Tags drinnen? Immer nur ein Wort oder auch durch "," getrennt mehrere Wörter?
Es wäre hilfreich zu wissen: Was kann wie in der Spalte Tags stehen? Was kann der User eingeben? Was soll dann das gewünschte Ergebnis sein?

Ja wenn du in der Spalte Tags mehrere Wörter mit "," getrennt stehen hast und der User auch mehrere Wörter eingeben kann (mit "," trennen) dann wirst du auf Java Seite die User eingabe splitten müssen.
Auf DB Seite ist so eine Spalte leider falsch! Pro Datensatz und Spalte nur 1 Wert und keine Liste 🙁
 
Also in der Spalte Tags stehen mehrere Wörter. Halt Stichpunkte als Themen für Bücher. Und in dem Textfeld worum es hier gerade geht, kann der User Wörter eingeben (mehrere mit Komma getrennt) und anhand dieser Wörter(Tags) in der Datenbank nach Büchern suchen, welche die gesuchten Tags zugewiesen bekommen haben. Jedoch sollen mir dann alle Bücher ausgegeben werden, die mindestens ein Tag besitzen, der vom User eingeben wurde.

Auf DB Seite ist so eine Spalte leider falsch! Pro Datensatz und Spalte nur 1 Wert und keine Liste

Heißt, ich muss meine Spalten in der DB Tabelle umstrukturieren, sodass immer nur ein Wort in der Tag Spalte steht?
 
Richtig!

Aber fang jetzt nicht an und mach X Spalten Tag1, Tag2, Tag3 etc sondern eine eigene Tabelle für Tags und eine Cross-Referenz-Tabelle für die Beziehung der Bücher zu den Tags. Damit kannst du dann vernünftig arbeiten.

Gruß

Claus
 

Neue Themen


Zurück
Oben