在表SQL查询中转义单引号

时间:2010-10-01 13:16:01

标签: java jdbc

使用java.sql.Preparedstatement意味着在解析查询时将完成字符的转义,当我的数据中有单引号但当我在表名中有单引号时查询不起作用时也会发生这种情况(我使用的是Oracle 11g)。

这是我的代码:

Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection(
    "jdbc:oracle:thin:client/adept@ind-db-02:1521:ind02");

PreparedStatement preparedStatement = con.prepareStatement(
    "SELECT * FROM (?) where rownum=1");

preparedStatement.setString(1,"CLIENT.\"SR'tab\"");
ResultSet rs3=preparedStatement.executeQuery();

有没有办法使用预准备语句从表名中转义单引号?

3 个答案:

答案 0 :(得分:4)

PreparedStatement占位符不适用于表名或列名,它们仅适用于实际列值。换句话说,你实际上是在滥用PreparedStatement。

另见

答案 1 :(得分:1)

我建议您现在更改这些表名,以防止将来发生痛苦。我们所有人都使用的高性能工具非常棒,但当一条颜色在线条之外的距离太远时,痛苦就无止境了。

答案 2 :(得分:0)

虽然使用绑定参数将数据传递给数据库是非常正确的,但是不能对表名使用绑定参数。

在这种情况下,应该适当引用它。

e.g。 (另):

PreparedStatement preparedStatement=
  con.prepareStatement("SELECT * FROM \"CLIENT.SR'tab\" where rownum=1");