Eclipselink意外转义LIKE查询
问题描述:
我需要帮助解决一个奇怪的错误。在Oracle 12和Eclipselink 2.5.2上运行的应用程序具有简单的搜索屏幕,该屏幕使用LIKE子句和“%”作为通配符。Eclipselink意外转义LIKE查询
应用程序使用条件生成器创建查询。 QA测试人员只在搜索屏幕中输入“_”下划线字符。应用程序代码用'%'字符包装用户指定的文本。
new StringBuilder("%").append(param).append("%").toString()
在运行时,如下查询被执行准备语句参数绑定:
bind => [%\_%, ACTIVE, IT, 20, 0]
含义意外(至少对我来说)的EclipseLink决定逃离“_”字符与领先的“\”。数据库是Oracle 12.然后我会期望生成的查询带有“ESCAPE'\'”后缀,但这不会发生,并且查询不会返回任何内容,因为如果没有escape子句,则会处理“\ _”,就好像它是原始用户搜索字符串。
我错过了什么?
答
Eclipselink不会执行任何转义,这是远程客户端代码中的缺陷。对不起,噪音。
很奇怪,Oracle 10 e eclipseLink 2.3.2不会发生这种情况。你有没有试过看到wthat的http流量看起来像? – GionJh
通过Oracle设施/日志记录查看调用的SQL,以查看实际传递的内容 –
检查代码并打印出'param'变量以及从StringBuilder构建的结果字符串,但EclipseLink不会转义您传入的任何内容特别是当你使用参数绑定时,除非你已经告诉它。显示您正在构建的实际查询和表达式。 – Chris