实现搜索功能 - eclipselink SQL 以字符串作为参数和通配符 %
Implementing Search function - eclipselink SQL with string as parameter and wildcard %
我在对我的网站进行 SQL 查询时使用 eclipselink 语法时遇到困难。目前,我已经创建了一个带有适当按钮的搜索 text-box 条目。可以通过标题和描述搜索数据记录,但搜索内容必须与我的数据库数据中的 titles/descriptions 完全匹配。我的主要问题是使用带有参数 "searchString" 的 LIKE 子句和通配符功能 (%) 创建正确的 SQL 查询。
下面,我包含了来自实体 class 的查询示例。
@NamedQuery(name = "Ad.findByString", query = "SELECT a FROM Ad a WHERE a.title LIKE :searchString OR a.description LIKE :searchString")
我理解“:”标记表示正在使用参数。有没有人对如何实施通配符 % 功能以搜索包含搜索内容的 return 广告有任何建议?
下面我还包含了数据库中的 getSearchedAds 方法 class
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;
}
感谢您的宝贵时间。
我认为您需要先将 db-wildcard 字符连接到 searchString
,然后再将其设置为查询的参数:
searchString = "%" + searchString + "%";
q.setParameter("searchString", searchString);
并保持 NamedQuery 不变。
我在对我的网站进行 SQL 查询时使用 eclipselink 语法时遇到困难。目前,我已经创建了一个带有适当按钮的搜索 text-box 条目。可以通过标题和描述搜索数据记录,但搜索内容必须与我的数据库数据中的 titles/descriptions 完全匹配。我的主要问题是使用带有参数 "searchString" 的 LIKE 子句和通配符功能 (%) 创建正确的 SQL 查询。
下面,我包含了来自实体 class 的查询示例。
@NamedQuery(name = "Ad.findByString", query = "SELECT a FROM Ad a WHERE a.title LIKE :searchString OR a.description LIKE :searchString")
我理解“:”标记表示正在使用参数。有没有人对如何实施通配符 % 功能以搜索包含搜索内容的 return 广告有任何建议?
下面我还包含了数据库中的 getSearchedAds 方法 class
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;
}
感谢您的宝贵时间。
我认为您需要先将 db-wildcard 字符连接到 searchString
,然后再将其设置为查询的参数:
searchString = "%" + searchString + "%";
q.setParameter("searchString", searchString);
并保持 NamedQuery 不变。