Montag, 14. November 2011

Suche in DB2 mit Java

Häufig muss man mit Java in relationalen Datenbanken nach Texten suchen.
Dabei sollte die Groß- und Kleinschreibung nicht von Bedeutung sein.

Doch wie erreicht man dies?

Komplizierter wird dies noch, wenn man die deutschen Sonderzeichen beachtet.
Was passiert mit eine "ß" ? Wie wird es umgesetzt?

Die Antwort ist folgende.
Sowohl die Daten in der Datenbank, als auch die Java-Strings müssen mit
toLower() auf lower-case umgestellt werden.

Im folgenden kommt ein Real-World-Beispiel, wie es oft in unseren Programmen auftaucht. Wenn man ein "_" als searchtTerm übergibt gibt es keine Einschränkung.
Man beachte, das im DB2 mit java die substr()-funktion aufgerufen werden muss, sonst klappt das nicht.

select distinct(BERATERNAME) as beratername 
from ALMAUSR.RSB_RUECK
where lower(BERATERNAME) like :searchTerm or ('_' = substr(:searchTerm, 1, 1))



In Java erfolgt, das toLower wie folgt.
String searchTerm = "Außendienst";
searchTerm = searchTerm.toLowerCase(Locale.GERMANY);
searchTerm = searchTerm + "%";

1 Kommentar:

  1. Hi Martin,
    that's great! Thank you so much.

    So kann man übrigens einen SQL-Parameter im select setzen:
    select cast(:myTinyInt as int) from ...

    Der Parameter myTinyInt muss gecastet werden, da DB2 bei einem Prepared Statement sonst nicht weiß, von welchem Typ der Parameter ist.

    AntwortenLöschen