Like-Klausel; NPE bzw. leeres ResultSet

Status
Nicht offen für weitere Antworten.

@x.l

Bekanntes Mitglied
Hallo,

ich stelle mit Hilfe eines Servlets eine Abfrage an eine Access-DB. Dabei verwende ich die LIKE - Klausel für eine Wortgruppe (Bsp: "suche den Text"), d.h. also mit Leerzeichen.
(Anm.: Die Verwendung von * anstelle von % in der Like-Klausel hatte mich auch verwundert, aber nach ein paar Tests direkt in Access zeigte sich, dass das der richtige Weg ist.)

Ich bekomme diese (scheinbar) leichte Aufgabe, aber einfach nicht gebacken, entweder bekomme ich eine NullPointerException (NPE) oder das erhaltene ResultSet ist leer.

Hier mal, dass was ich so alles ausprobiert habe:

1. Verwendung eines PreparedStatement:

Code:
pstm = connection.prepareStatement("SELECT * FROM TabName WHERE TabName.ColName LIKE '*?*';");
pstm.setString(1, identifier);
rs = pstm.executeQuery();

Der Aufruf pstm.setString() produziert eine NPE! Darauf hin habe ich mehrere Kombinationen von '*?*' probiert, sobald ich aber etwas anderes nehme (Bsp. Anführungszeichen, Kombination aus Anführungszeichen und Hochkommas, ...) funktioniert zwar (meist) die Zeile pstm.setString(), aber dafür liefert executeQuery eine SQLException (Access meldet falsche Syntax -> was ja auch stimmt)

2. Verwendung von Statement

Code:
stm = connection.createStatement();
String query = "SELECT * FROM TabName WHERE TabName.ColName LIKE '*" + identifier + "*';";
rs = stm.executeQuery(query);

Dies funktioniert zwar, jedoch ist das ResultSet leer! (Die direkte Abfrage in Access liefert jedoch mehrere Ergebnisse, d.h. die Abfrage müsste korrekt sein.)

Ich bin für jede Anregung dankbar, wie man dieses Problem lösen könnte!

Grüße
Axel
 
wenn etwas nicht funktioniert, warum um alles in der Welt dann Variablen verwenden?
test doch erst mal
String query = "SELECT * FROM TabName WHERE TabName.ColName LIKE '*anton*';";
rs = stm.executeQuery(query);
oder was immer dein Teststring ist

-------

fürs Prepared noch eine Variante (erst testen wenn auch Preperad mit festen String anton funkioniert!):
pstm = connection.prepareStatement("SELECT * FROM TabName WHERE TabName.ColName LIKE ?;");
pstm.setString(1, "*"+identifier+"*");
 
Habe beides probiert (habe auch keine Variable verwendet), zwar habe ich keine NPE, das ResultSet blieb dennoch leer!
???:L
 
Die Lösung war die Kombination von SlaterB und Gast:


Code:
pstm = connection.prepareStatement("SELECT * FROM TableName " +
                                   "WHERE TableName.ColName LIKE ?;");
            
pstm.setString(1, "%Zu suchende Wortgruppe%");

Danke!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben