WSJdbcConnection 不包装 com.microsoft.sqlserver.jdbc.SQLServerConnection 类型的任何对象
WSJdbcConnection does not wrap any objects of type com.microsoft.sqlserver.jdbc.SQLServerConnection
我正在使用 SQLServerBulkCopy API 在 SQL 服务器数据库中存储数百万条记录。我收到一条错误消息
"com.microsoft.sqlserver.jdbc.SQLServerException: Destination
connection must be a connection from Microsoft JDBC Driver for SQL
Server"
在初始化过程中像
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(conn);
所以我打开了连接
SQLServerConnection conn = connection.unwrap(SQLServerConnection.class);
原来的连接是com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8da2f3e2
在检查了之前提出的以下问题后
1. WSJDBCConnection does not wrap objects of type Oracle jdbc Connection
2.
我发现是因为 sqljdbc42.jar 的类加载器,数据源和应用程序不匹配
所以我把我的server.xml改成了这样
<library id="global">
<fileset dir="${server.config.dir}/lib/global" includes="*.jar"/>
</library>
<jdbcDriver id="SqlJdbcDriver"
javax.sql.DataSource =
"com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource"
libraryRef="global"/>
<application id="myApp" name="myApp" type="ear" location="myApp.ear">
<classloader commonLibraryRef="global"/>
</application>
数据源标记驻留在另一个 server.xml 中,它是 env 特定的 -
<dataSource id="myDS" jdbcDriverRef="SqlJdbcDriver" jndiName="jdbc/myDS">
<connectionManager agedTimeout="2m" connectionTimeout="2s" maxPoolSize="50" minPoolSize="0" />
<properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.com" />
</dataSource>
sqljdbc42.jar 也位于 lib/global 目录中。
另外,我删除了 dropins 目录并将 myApp 放在 apps 目录中,因为如果应用程序存在于 dropins 目录中,application
标记将不起作用。
在所有这些更改之后,我得到了异常
"com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8155ea2d does not wrap any
objects of type com.microsoft.sqlserver.jdbc.SQLServerConnection."
任何人都可以找出解决方案或我还缺少什么吗?
JDBC 包装器模式 java.sql.Wrapper.unwrap(c) 仅用于解包为接口 类,而不是具体实现 类。
com.microsoft.sqlserver.jdbc.SQLServerConnection
是一个实现,还好微软的JDBCDriver也为它提供了接口:com.microsoft.sqlserver.jdbc.ISQLServerConnection
.
尝试解包为接口,
ISQLServerConnection conn = connection.unwrap(ISQLServerConnection.class);
我正在使用 SQLServerBulkCopy API 在 SQL 服务器数据库中存储数百万条记录。我收到一条错误消息
"com.microsoft.sqlserver.jdbc.SQLServerException: Destination connection must be a connection from Microsoft JDBC Driver for SQL Server"
在初始化过程中像
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(conn);
所以我打开了连接
SQLServerConnection conn = connection.unwrap(SQLServerConnection.class);
原来的连接是com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8da2f3e2
在检查了之前提出的以下问题后
1. WSJDBCConnection does not wrap objects of type Oracle jdbc Connection
2.
我发现是因为 sqljdbc42.jar 的类加载器,数据源和应用程序不匹配
所以我把我的server.xml改成了这样
<library id="global">
<fileset dir="${server.config.dir}/lib/global" includes="*.jar"/>
</library>
<jdbcDriver id="SqlJdbcDriver"
javax.sql.DataSource =
"com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource"
libraryRef="global"/>
<application id="myApp" name="myApp" type="ear" location="myApp.ear">
<classloader commonLibraryRef="global"/>
</application>
数据源标记驻留在另一个 server.xml 中,它是 env 特定的 -
<dataSource id="myDS" jdbcDriverRef="SqlJdbcDriver" jndiName="jdbc/myDS">
<connectionManager agedTimeout="2m" connectionTimeout="2s" maxPoolSize="50" minPoolSize="0" />
<properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.com" />
</dataSource>
sqljdbc42.jar 也位于 lib/global 目录中。
另外,我删除了 dropins 目录并将 myApp 放在 apps 目录中,因为如果应用程序存在于 dropins 目录中,application
标记将不起作用。
在所有这些更改之后,我得到了异常
"com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8155ea2d does not wrap any objects of type com.microsoft.sqlserver.jdbc.SQLServerConnection."
任何人都可以找出解决方案或我还缺少什么吗?
JDBC 包装器模式 java.sql.Wrapper.unwrap(c) 仅用于解包为接口 类,而不是具体实现 类。
com.microsoft.sqlserver.jdbc.SQLServerConnection
是一个实现,还好微软的JDBCDriver也为它提供了接口:com.microsoft.sqlserver.jdbc.ISQLServerConnection
.
尝试解包为接口,
ISQLServerConnection conn = connection.unwrap(ISQLServerConnection.class);