2016-04-24 14 views
2

Ich versuche, eine Suchfunktion auf der Website zu organisieren, mit dem Spring-jdbc NamedParameterJdbcTemplate.Benannte Parameter funktioniert nicht mit MySql LIKE-Anweisung

public List<PhoneEntry> searchPhoneEntries(String search, String username) { 

    String SQL = "select * from entries, users where users.enabled=true " + 
      "and entries.username=:username " + 
      "and concat(secondName, firstName, patronymic, mobile, tel, " + 
      "address, entries.email) like ('%:search%')"; 
    MapSqlParameterSource params = new MapSqlParameterSource(); 
    params.addValue("username", username); 
    params.addValue("search", search); 
    return jdbcTemplate.query(SQL, params, new PhoneEntryMapper()); 
} 

Aber ich bekomme eine leere Liste und habe keinen Fehler.

Bei Verwendung einer einfachen Verkettung:

"...like '%" + search + "%'"; 

es richtig funktioniert, aber wie ich verstehe es nicht sicher ist.

Ich habe auch versucht '%' Symbole in Parameter hinzu:

MapSqlParameterSource params = new MapSqlParameterSource(); 
params.addValue("username", username); 
params.addValue("search", "'%" + search + "%'"); 
return jdbcTemplate.query(SQL, params, new PhoneEntryMapper()); 

Aber es nicht arbeiten.

Antwort

1

Die Lösung besteht darin, die Parameter ohne Anführungszeichen

params.addValue("search", "%" + search + "%"); 

und in der SQL-Zeichenfolge

schreiben
String sql = "... like :search"; 

Ihr erster Ansatz hinzuzufügen ('%:search%') nicht da benannte Parameter funktionierten innerhalb nicht erkannt Zeichenfolgenliterale.

Der zweite Ansatz params.addValue("search", "'%" + search + "%'"); funktionierte nicht, da jetzt die Anführungszeichen Teil der gleichen Zeichenkette waren. Daher sollte Mysql nach Strings suchen, die mit einem Zitat beginnen und enden und den Suchbegriff enthalten.

+0

Ja, es funktioniert! Vielen Dank! –

Verwandte Themen