首页 > 解决方案 > PostgresSQL JDBC 是否可以强制使用仅客户端准备好的语句?

问题描述

我想在不更改代码的情况下消除 PGSQL 上的服务器端准备语句。这在带有一些参数的 JDBC 上是可能的吗?

明确地说,我想使用 Client Prepared Statements,这意味着我的代码不会改变,我将享受 Prepared Statements 的安全优势,但不会在服务器上编译它。

标签: javasqlpostgresqljdbcprepared-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);

如果您在您unwrap的中,您还可以为该连接上的所有准备好的语句设置连接级别的阈值。org.postgresql.PGConnectionjava.sql.Connection

将其添加到 URL 的示例:jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true&prepareThreshold=0


推荐阅读