我想在不更改代码的情况下消除PGSQL上的服务器端预准备语句。使用某些参数在JDBC上是否有可能?
明确地说,我想使用客户端准备语句,这意味着我的代码不会更改,并且我将享受准备语句的安全优势,但不能在服务器上进行编译。
[在某些情况下,您可能希望禁用服务器准备的语句。例如,如果您通过与服务器准备的语句不兼容的平衡器路由连接,则别无选择。
您可以通过设置
prepareThreshold=0
来禁用服务器端预处理语句的使用>代码示例:
java.sql.PreparedStatement pstmt = conn.prepareStatement("SELECT ..."); // get the PostgreSQL-specific class org.postgresql.PGStatement pgstmt = pstmt.unwrap(org.postgresql.PGStatement.class); // disable server-side prepared statements pgstmt.setPrepareThreshold(0);
如果您在
unwrap
中将org.postgresql.PGConnection
设置为java.sql.Connection
,也可以为该连接上所有准备好的语句在连接级别上设置阈值。
将其添加到URL的示例:jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true&prepareThreshold=0