我在查询中使用单引号作为准备好的语句时遇到问题。我想查找Jack's Deli,它是数据库列中的值。
String result = "Jack''s Deli"
String sqlStatement = "select * from Restaurant where restauraunt_name like ? ";
PreparedStatement pStmt = conn.prepareStatement(sqlStatement);
pstmt.setString(1, result);
这将检索0个结果。但是,当我直接在数据库本身中搜索时,使用:
select * from Restaurant where restauraunt_name like 'Jack''s Deli';
杰克的熟食店归还。我的搜索对于除单引号之外的其他所有字符都可以正常工作,即使我在Oracle中使用第二个单引号将其转义。
我认为查询参数可能会在JDBC连接中的某个地方被更改,并且不会完全按照准备好的状态发送给数据库(仅在涉及单引号的情况下]
我研究打印参数值以确保DB接收到正确的值,但是在Oracle中似乎无法实现。还有其他方法可以确保将正确的参数值传递给数据库吗?
编辑1:我没有在Java中转义该字符,将附加引号放在此处,以便在Oracle DB中转义该字符。即使直接在Oracle DB中输入,也不能使用单引号。需要使用两个单引号将其传递,以便它可以从数据库端运行。
替换
String result = "Jack''s Deli"
with
String result = "Jack''''s Deli"
说明:使用额外的一对单引号来转义一对单引号。