我有一个搜索查询,必须使用包含搜索来搜索表格中的列。列上有ctxsys.context类型索引。使用预准备语句在表上获取数据时,搜索查询无法处理特殊字符,如 - ,/,_等。
这是我的代码 -
String query = "select * from parties where contains (party_name ,'%' || ? || '%')>0";
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, searchName);
该代码适用于没有特殊字符的文本。
当我在sqlDeveloper中运行以下查询时,它运行正常。
select * from parties where contains(party_name,'c/o')>0;
请建议我在准备好的声明中做出哪些更改,以使其适用于特殊字符。
答案 0 :(得分:1)
请参阅此问题,如何在准备好的声明中使用contains。 PreparedStatement with CONTAINS query
如果上述方法有效,则必须在查询中使用escape 像
SELECT * FROM BIRDS WHERE SPECIES='Williamson's Sapsucker
statement.executeQuery("SELECT * FROM BIRDS WHERE SPECIES='Williamson/'s Sapsucker' {escape '/'}");
的参考资料