我正在使用Statement的executeUpdate和executeQuery。我要连接到SQL查询中的字符串值至少可以包含'\
字符和Unicode。
PreparedStatement似乎是自动执行此操作,但JDBC库中是否有一些实用程序函数可以转义任意字符串以用于SQL查询?
我遇到的示例错误:
org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near
和
org.postgresql.util.PSQLException: ERROR: invalid Unicode escape
Hint: Unicode escapes must be \uXXXX or \UXXXXXXXX.
答案 0 :(得分:5)
不,它不是JDBC的一部分,它对于不同的数据库管理系统是不同的。您应该使用PreparedStatement
进行带参数的查询。这样更安全,并且可以更好地执行,因为可以编译查询。
请参阅PostgreSQL手册中的4.1. SQL Syntax - Lexical Structure。
E.g。
以下不那么简单的例子用西里尔字母写下俄语单词“slon”(elephant):
U&"\0441\043B\043E\043D"
答案 1 :(得分:1)
JDBC的方式是:
QueryExecutorImpl.parseQuery()
SimpleParameterList
不幸的是,为了获得完整的字符串转义(使用编码,处理特殊字符等),您可能需要以某种方式访问和使用QueryExecutorImpl
,我无法弄清楚如何去做。 PreparedStatement
内部使用QueryExecutorImpl
。
结论,最好和最简单的方法是使用PreparedStatement
。