【发布时间】:2019-06-01 14:04:35
【问题描述】:
我正在使用 SQLServerBulkCopy API 在 SQL Server 数据库中存储数百万条记录。我收到一条错误提示
“com.microsoft.sqlserver.jdbc.SQLServerException:目标 连接必须是来自 Microsoft JDBC Driver for SQL 的连接 服务器”
在初始化过程中
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.I get the `DSRA9122E: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@d3t7e556 does not wrap any objects of type oracle.jdbc.OracleConnection
我发现是因为sqljdbc42.jar的classLoader,datasource和application不匹配
所以我像这样更改了我的 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>
datasource 标记驻留在另一个 server.xml 中,它是 env 特定于 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 放置在应用程序目录中,因为如果应用程序存在于 dropins 目录中,application 标记将不起作用。
在所有这些更改之后,我也得到了异常
"com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8155ea2d 不包装任何 com.microsoft.sqlserver.jdbc.SQLServerConnection 类型的对象。”
任何人都可以找出解决方案或我还缺少什么吗?
【问题讨论】:
标签: sql-server jdbc datasource websphere-liberty server.xml