如何判断JDBC驱动是否支持PreparedStatement?

How to determine if the JDBC driver supports PreparedStatement?

有没有办法以编程方式检测特定 JDBC 驱动程序是否支持 PreparedStatement 而无需调用 executeQuery() 并捕获 "not implemented" 异常?

任何合规的 JDBC driver 必须实施准备好的语句。如果你有一个 driver 不支持准备好的语句,它在形式上不是 JDBC driver (即使它实现(部分) JDBC API).

由于 JDBC 规范要求支持预处理语句,因此 API 中没有任何内容可以检查它们是否受支持。联系这个 driver 的 vendor/author 并告诉他们准备好的语句不是可选的。不幸的是,这意味着您在执行之前无法发现它。

此外,如果任何 driver 不支持准备好的语句允许准备语句但仅在执行时失败,我会感到非常惊讶。这将 - 对我来说 - 建议准备好的语句 are 受支持(否则为什么在 Connection.prepareStatement 被调用时不只是失败),但是你正在做的任何事情都不被支持(比如调用executeQuery(String) 而不是 executeQuery()).