![](/img/trans.png)
[英]how to match only the certain number in the string and not a substring in java?
[英]How to match individual substring to a String in Sql?
我在主类中使用实体管理器调用命名查询,如下所示
this.list = em.createNamedQuery(MyClass.Check_Name).setParameter("name", NAMES).getResultList();
命名查询如下
@NamedQueries({
@NamedQuery(name = MyClass.Check_Name, query = "SELECT sc FROM sampleTable sc where sc.name IN :name")})
我正在传递包含字符串值('A','B','C')的NAMES
现在我面临的问题是表中的sc.name列由各个值组成,例如“ A”,“ B”,“ C”,但我正在将查询中的整个sc.name列与NAMES变量进行比较。因此它返回)结果列表。
如何将单个子字符串与字符串匹配?
对于某些用法,JDBC具有SQL ARRAY的Array类,例如createArrayOf 。
Array array = connection.createArrayOf("VARCHAR", new Object[] {"A", "B", "C" });
preparedStatement.setArray("name", array);
将List
(或任何Collection
)传递给setParameter方法。
query.setParameter("name",list)
休眠专门执行检查实例收集
public TypedQuery<X> setParameter(String name, Object value) {
try {
if(value instanceof Collection) {
this.query.setParameterList(name, (Collection)value);
} else {
this.query.setParameter(name, value);
}
this.registerParameterBinding(this.getParameter(name), value);
return this;
} catch (QueryParameterException var4) {
throw new IllegalArgumentException(var4);
} catch (HibernateException var5) {
throw this.getEntityManager().convert(var5);
}
}
其他JPA实现可能具有相同的行为
如果您坚持使用名称类型为“ A,B,C”的字符串,则可以看到2个选项:1)每次都构建sql,没有参数
query = "SELECT sc FROM sampleTable sc where sc.name IN (" + NAMES + ")"
如果NAMES来自用户输入,则需要进行sql注入。
2)带参数的sql injection safe选项,但性能可能较慢,优化器无法使用索引
query = "SELECT sc FROM sampleTable sc where ',' || :name || ',' like '%,' || sc.name || ',%'"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.