jdbc/PreparedStatement转义序列

jdbc/PreparedStatement转义序列,jdbc,prepared-statement,Jdbc,Prepared Statement,我试图在Java中通过PreparedStatement调用SQL时实现jdbc转义序列 下面是我的示例代码 String sql ="select 1 from dual where 'abcd' = ? {escape '|'}"; ps = con.prepareStatement(sql); ps.setString(1,"abcd"); ps.executeQuery(); 在执行该类时,我得到以下错误 java.sql.SQLSyntaxErrorException:ORA-00

我试图在Java中通过PreparedStatement调用SQL时实现jdbc转义序列

下面是我的示例代码

String sql ="select 1 from dual where  'abcd' = ? {escape '|'}";
ps = con.prepareStatement(sql);
ps.setString(1,"abcd");
ps.executeQuery();
在执行该类时,我得到以下错误

java.sql.SQLSyntaxErrorException:ORA-00933:sql命令未正确结束

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jdbcdslog.PreparedStatementLoggingHandler.invoke(PreparedStatementLoggingHandler.java:35)
有人能帮忙吗?

这只对LIKE子句有效

请尝试以下操作:

String sql = "select 1 from dual where 'abcd' like ? {escape '|'}";

不能将转义序列与IN子句一起使用?@Gopal:不。只能与LIKE子句一起使用。为什么要将它与IN子句一起使用?我有许多sql文件,其中有IN子句将接受可变数量的参数。我想到了转义单引号,并将一个字符串从Java传递到sql。类似于ps.setString1、abc |'、| bcd |';并将| pipe符号转义。@Gopal这怎么行呢,别以为你能发明数据库所没有的功能。