gpt4 book ai didi

java - 尝试搜索部分匹配的属性

转载 作者:行者123 更新时间:2023-12-01 17:54:03 25 4
gpt4 key购买 nike

所以我试图查询(Java)数据库(h2)的搜索功能。要搜索查询,应找到属性部分匹配的条目。

搜索可以针对属性的每种组合,因此检查它们是否有效。

  • getName() 返回一个字符串
  • getDescription() 返回一个字符串
  • getBreed() 返回一个字符串
  • getRanking() 返回一个整数
  • getBirthdate() 返回数据库中的 LocalDateTime 对象,它是一个日期其他的与数据库中的数据类型相同。

    @Override
public List<Horse> search(Horse mockHorse) {
LOGGER.trace("Search horses which match{}", mockHorse);
String query = "SELECT * FROM " + TABLE_NAME + " WHERE" +
"(UPPER(name) LIKE UPPER(%?%)) AND "+
"UPPER(description) LIKE UPPER(%?%)"+
" AND breed LIKE ? AND ranking=?";
// set value to wildcard to match every value
if (!mockHorse.getBreed().equals("")) {
mockHorse.setBreed("%");
}

(sorry for that format it didnt take it otherwise)

    Object[] obj = new Object[]{
mockHorse.getName(),
mockHorse.getDescription(),
mockHorse.getBreed(),
mockHorse.getRanking()
};

if (!(mockHorse.getBirthdate()==null)){
query+= " AND birthdate <=?";
obj = new Object[] {
mockHorse.getName(),
mockHorse.getDescription(),
mockHorse.getBreed(),
mockHorse.getRanking(),
mockHorse.getBirthdate().toString()
};
}

final String sql = query +';';
return jdbcTemplate.query(sql,obj, this::mapRow);
}

但是,无论我尝试修复它,我只会收到新的错误,目前我陷入了

Syntax error in SQL statement "SELECT * FROM HORSE WHERE(UPPER(NAME) LIKE UPPER(%[*]?%)) AND UPPER(DESCRIPTION) LIKE UPPER(%?%) AND BREED LIKE ? AND RANKING=? AND BIRTHDATE <=?;"; expected "), NOT, EXISTS, INTERSECTS, UNIQUE"; SQL
statement:
SELECT * FROM Horse WHERE(UPPER(name) LIKE UPPER(%?%)) AND UPPER(description) LIKE UPPER(%?%) AND breed LIKE ? AND ranking=? AND birthdate <=?; [42001-200]

请您给我一个提示,告诉我我做错了什么。 (我尝试从 UPPER 中删除 ' 并将它们移到 UPPER 之外('UPPER')并将其包裹在 % (UPPER('%?%')) 周围。

最佳答案

  1. 您需要使用'%' || ? || '%' 而不是 %?%

  2. UPPER函数可以用来模拟不区分大小写的LIKE,但是这样的模拟不能正确处理一些国家字母,并不是每个字母都有1: 1 小写和大写变体之间的映射。使用 ILIKE 更好、更简单:

name ILIKE '%' || ? || '%'
  • 如果您的参数可以包含 _%,您需要使用一些字符对其进行转义,并将 ESCAPE 子句添加到 LIKE /喜欢:
  • name ILIKE '%' || REGEXP_REPLACE(?, '([_%\\])', '\\$1') || '%' ESCAPE '\'

    在 Java 代码中,您需要输入 \\ 来获取字符串中的 \(\\\\ 表示 \\)。如果您的参数中未使用 _%,则不需要此额外转换。

    您的 SQL 有两个地方需要修复。

    关于java - 尝试搜索部分匹配的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60749309/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com