SQLServerCallableStatement

SQLServerCallableStatement

我有一个接受连接的通用API。似乎有一个调用方通过了一个连接,该连接的prepareCall返回一个类型为NewProxyCallableStatement的对象。以下代码将失败:

SQLServerCallableStatement stmt = (SQLServerCallableStatement) connection.prepareCall(sprocSQL);


API调用者看到的完整异常是:

java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyCallableStatement cannot be cast to com.microsoft.sqlserver.jdbc.SQLServerCallableStatement


我需要使用SQLServerCallableStatement,因为我正在使用类型为TABLE的输入参数调用存储过程,并且SQLServerCallableStatement具有允许构造表类型变量的setStructured方法。

最佳答案

解决方案是使用以下代码:

SQLServerCallableStatement stmt = connection.prepareCall(sprocSQL).unwrap(com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.class);


如果使用的是c3p0,则需要使用已修复unwrap错误的版本。我用c3p0-0.9.5.2测试了以上内容。

参考:
unwrap Method (SQLServerCallableStatement)

10-05 21:20