我需要帮助解决一个奇怪的错误。在Oracle 12和Eclipselink 2.5.2上运行了一个应用程序,其中有一个简单的搜索屏幕,它使用LIKE子句和“%”作为通配符。
应用程序使用条件构建器创建查询。 QA测试人员仅在搜索屏幕中输入“_”下划线字符。应用程序代码使用'%'字符包装用户指定的文本。
new StringBuilder("%").append(param).append("%").toString()
在运行时,执行查询时,预准备的语句参数绑定如下:
bind => [%\_%, ACTIVE, IT, 20, 0]
意味着意外(至少对我而言)Eclipselink已经决定使用前导“\”来逃避“_”字符。数据库是Oracle 12.我希望生成的查询后缀为“ESCAPE'\'”,但这不会发生,并且查询不返回任何内容,因为在没有escape子句的情况下,“\ _”被处理,好像它是原始用户搜索字符串。
我错过了什么?
答案 0 :(得分:0)
Eclipselink不执行任何转义,这是远程客户端代码中的缺陷。对不起噪音。