【发布时间】:2020-06-06 22:38:34
【问题描述】:
我想在不更改代码的情况下消除 PGSQL 上的服务器端准备语句。这在 JDBC 上是否可以通过某些参数实现?
明确地说,我想使用 Client Prepared Statements,这意味着我的代码不会改变,我将享受 Prepared Statements 的安全优势,但不会在服务器上编译它。
【问题讨论】:
标签: java sql postgresql jdbc prepared-statement
我想在不更改代码的情况下消除 PGSQL 上的服务器端准备语句。这在 JDBC 上是否可以通过某些参数实现?
明确地说,我想使用 Client Prepared Statements,这意味着我的代码不会改变,我将享受 Prepared Statements 的安全优势,但不会在服务器上编译它。
【问题讨论】:
标签: java sql postgresql jdbc prepared-statement
在某些情况下,您可能希望禁用服务器准备的语句。例如,如果您通过与服务器准备的语句不兼容的平衡器路由连接,则您别无选择。
您可以通过设置
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);
如果您在java.sql.Connection 中unwrap org.postgresql.PGConnection,您还可以为该连接上的所有准备好的语句设置连接级别的阈值。
将其添加到 URL 的示例:jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true&prepareThreshold=0
【讨论】: