在通过Oracle JDBC在JAVA的预备语句中使用单引号时,我遇到了处理单引号的问题。
比方说,我们有一个带有Restaurant_name列且值为1的表Restaurant:Jack's Deli
我想使用一个简单的预准备语句查询,例如:
String result = "Jack\'\'s Deli"
String sqlStatement = "select * from Restaurant where restauraunt_name like ? escape '\\' ";
PreparedStatement pStmt = conn.prepareStatement(sqlStatement);
pstmt.setString(1, result);
结果显示0个返回值,但是当我直接在数据库(ORACLE)中搜索查询时,它可以正常工作并检索结果。 (Oracle使用两个单引号作为第一个的转义符)
我认为该值未正确传递到数据库。或还有其他格式问题。
如果使用Java 9或更高版本,请尝试使用PreparedStatement::enquoteLiteral将字符串括在单引号中。它用两个单引号替换字符串中出现的任何单引号。
如果您使用的是Java的较低版本,则可以使用两个单引号来转义单引号。
准备好的语句的要点是,您不需要任何转义。
.setString(1, "Jack's Deli")
将完成它。