Java 大括号在转义SQL语句中被删除

Java 大括号在转义SQL语句中被删除,java,sql,postgresql,escaping,Java,Sql,Postgresql,Escaping,下面的说法有什么不对 String sql = "INSERT INTO tablename (colname) VALUES ($tag$$${a{e^i\\pi}a}$$$tag$);"; Connection connection = DB.getConnection(); Statement st = connection.createStatement(); st.executeQuery(sql); 执行

下面的说法有什么不对

        String sql = "INSERT INTO tablename (colname) VALUES ($tag$$${a{e^i\\pi}a}$$$tag$);";
        Connection connection = DB.getConnection();
        Statement st = connection.createStatement();       
        st.executeQuery(sql);
执行之后,在tablename中应该有一个新行,colname中有$${a{e^i\pi}a}$$(类型:text)。但是我得到的是${ae^I\pia}$$,这是不带大括号的预期值


我在Windows7机器上用Java 7.11、PostgreSQL 9.1(x64)对其进行了测试。

只需使用准备好的语句,就不会出现未替换字符串的错误,因为SQL会自动为您执行这些操作

  st = conn.prepareStatement("INSERT INTO tablename (colname) VALUES (?)");
  st.setString(1, "$${a{e^i\\pi}a}$$");
  st.executeUpdate();
有关更多信息,请查看此问题的答案:
这是由驱动程序的JDBC转义引起的,例如,为了支持
{call…}
{fn…}
语法

根据这条线索:

您需要调用
语句。setEscapeProcessing(false)
以防止驱动程序解析JDBC转义语法

请注意,这仅在使用美元报价时发生。“常规”单引号内的字符串文字不受JDBC转义的约束(就像
PreparedStatement
s的值一样)