Java Oracle解析“的文本”';{S} 巴黎2“;作为字符串文本,然后查找它作为SQL转义序列处理的{S},它不';我认不出

Java Oracle解析“的文本”';{S} 巴黎2“;作为字符串文本,然后查找它作为SQL转义序列处理的{S},它不';我认不出,java,sql,oracle,Java,Sql,Oracle,运行jsp报告后,我遇到以下错误 查询标记:doAfterBody(),0,位置处不支持的SQL92标记:3477:S 我知道以下代码段导致了问题“{S}”: ……。。和(L.在(N'PARIS2',N'{S}PARIS2')中的适用位置区域ID) 根据我的调查,我了解到: Oracle解析SQL并将“{S}Paris2”的文本视为字符串文字,然后查找它视为无法识别的SQL转义序列的{S} 下面的链接很好地解释了“转义字符”: 我们必须使用{S}后跟名称 上述AND语句适用于SQL Serve

运行jsp报告后,我遇到以下错误

查询标记:doAfterBody(),0,位置处不支持的SQL92标记:3477:S

我知道以下代码段导致了问题“{S}”:

……。。和(L.在(N'PARIS2',N'{S}PARIS2')中的适用位置区域ID)

根据我的调查,我了解到: Oracle解析SQL并将“{S}Paris2”的文本视为字符串文字,然后查找它视为无法识别的SQL转义序列的{S}

下面的链接很好地解释了“转义字符”:

我们必须使用{S}后跟名称

上述AND语句适用于SQL Server和MySQL,但会导致Oracle出现问题,“当您使用大括号转义单个字符时,转义字符将成为查询中的一个单独标记。”

由于上述原因,应用程序将{S}视为带大括号的单个字符的转义标记,从而在查询中成为单独的标记

所以,请你能帮助我如何在甲骨文或任何建议中用大括号转义单个字符吗

试试看

AND (L.Applicable_Location_Region_ID IN (N'PARIS2', N'\{S\}Paris2')) 
编辑:

从Toad运行此查询

select (N'{S}test2') from dual where ((N'{S}test2') IN (N'test2', N'{S}test2'))
他对我有用。
您确定问题出在Oracle数据库中,而不是在访问它的类/驱动程序中吗?

谢谢您的建议,但仍然得到java.sql.SQLException:Non-supported SQL92 token位于位置:3546:SAnd顺便说一句,您的错误出在char 3477上,插入反斜杠后,它跳到3546?您是否正在构建包含数据的整个SQL字符串?您应该使用带参数的预处理语句。除了(可能)解决这个问题之外,它还可以保护你免受大多数伤害。