2016-04-24 12 views
2

Spring-jdbc NamedParameterJdbcTemplateを使用して、サイトで検索機能を整理しようとしています。NamedパラメーターがMySql LIKEステートメントで機能しない

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()); 
} 

しかし、空のリストを取得してもエラーは発生しません。

シンプル連結使用して:私はそれが安全ではありません理解し、それが正常に動作し

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

を、しかし。私も、パラメータに '%' 記号を追加してみました

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

しかし、それはあまりにも動作しません。

答えて

1

ソリューションは引用符なしで

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

をパラメータを追加することで、SQL文字列で指定されたパラメータは、内に認識されていないので、あなたの最初のアプローチ('%:search%')は動作しませんでした

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

を書きます文字列リテラル。

2番目のアプローチparams.addValue("search", "'%" + search + "%'");は引用符が類似の文字列の一部であったため動作しませんでした。したがって、引用符で始まり、検索用語を含む文字列を探すようにMysqlに依頼しています。

+0

はい、動作します。ありがとう! –

関連する問題