2016-05-23 13 views
0

Ich habe Probleme mit der Eclipselink-Syntax in einer SQL-Abfrage für meine Website. Zurzeit habe ich einen Suchtextfeldeintrag mit einer entsprechenden Schaltfläche erstellt. Datensätze können nach Titel und Beschreibung durchsucht werden, der Suchinhalt muss jedoch identisch mit den Titeln/Beschreibungen in meinen Datenbankdaten übereinstimmen. Mein Hauptproblem ist das Erstellen der richtigen SQL-Abfrage mit der LIKE-Klausel mit dem Parameter "searchString" und der Wildcard-Funktionalität (%).Implementieren Suchfunktion - Eclipselink SQL mit Zeichenfolge als Parameter und Platzhalter%

Im Folgenden habe ich ein Beispiel für meine Abfrage aus der Entitätsklasse eingefügt.

Ich verstehe, dass das ":" Zeichen anzeigt, dass ein Parameter verwendet wird. Hat jemand Vorschläge, wie die Wildcard% -Funktionalität implementiert werden kann, damit Suchanfragen Anzeigen mit dem Suchinhalt zurückgeben?

Unten habe ich auch von Datenbank-Klasse meine getSearchedAds Methode enthalten

public static Collection <Ad> getSearchedAds (String searchString) { 
     EntityManager em = DBUtils.getEmFactory().createEntityManager(); 
     Collection<Ad> results = null; 

     TypedQuery<Ad> q = em.createNamedQuery("Ad.findByString", Ad.class); 
     q.setParameter("searchString", searchString); 

     try { 
      results = q.getResultList(); 

     } catch (Exception e) { 
      results = null; 
     } 

Vielen Dank für Ihre Zeit.

+0

'Mysql' oder' sql-server', welche Datenbank haben Sie benutzt? – Blank

+0

@Reno Ich habe MySQL Workbench verwendet, um meine Datenbank zu erstellen –

Antwort

0

Ich glaube, Sie brauchen die db-Platzhalter-Zeichen an die searchString verketten, bevor Sie es als Parameter für die Abfrage festgelegt:

searchString = "%" + searchString + "%"; 
q.setParameter("searchString", searchString); 

und die NamedQuery halten, wie sie ist.

+1

Das hat funktioniert. Vielen Dank! –

Verwandte Themen