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的值一样)