2013-02-01 103 views
1

以下语句有什么问题?花括号在转义的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); 

执行之后,应该有一个新行INT表名,与$$ {A {E 1 I \ PI}一个} $$在colname的(类型:文本)。但我得到的只有$$ {ae^i \ pia} $$,这是没有大括号的预期。

我在Windows 7机器上的Java 7.11,PostgreSQL 9.1(x64)上测试了它。

回答

3

只需使用预准备语句,您就不会遇到未转义字符串的错误,因为SQL会自动为您执行此操作。

st = conn.prepareStatement("INSERT INTO tablename (colname) VALUES (?)"); 
    st.setString(1, "$${a{e^i\\pi}a}$$"); 
    st.executeUpdate(); 

因为你可以看看这个问题的答案的其他信息: Java - escape string to prevent SQL injection