Получение следующей ошибки при создании объекта SQLServerBulkCopy:
com.microsoft.sqlserver.jdbc.SQLServerException: Destination connection must be a connection from the Microsoft JDBC Driver for SQL Server.
- Использование SQL Server 2016;
- подключение с использованием SQL-аутентификации;
- Использование версий mssql-jdbc-6.4.0.jre8.jar и JRE 1.8.
Соединение прошло успешно, но создание объекта SQLServerBulkCopy завершилось неудачно.Не уверен, почему соединение не является экземпляром SQLServerConnection.
Код, используемый для создания соединения и объекта SQLServerBulkCopy:
public static Connection getConnection() throws Exception
{
String connectionUrl = "jdbc:sqlserver://" + serverName + ":1433;database=" + databaseName
+ ";user=xxxxxx;password=yyyyyyy";
Connection connection = null;
try
{
DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
connection = DriverManager.getConnection(connectionUrl);
}
catch (Exception e)
{
throw new ODSException("Unable to create connection to SQL Server.", e);
}
return connection;
}
private void executeBCP() throws ODSException {
//Create a Connection and SQLServerBulkCopy objects
try (Connection connection = JDBCUtil.getConnection();
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(connection))
{
boolean prevAutoCommit = connection.getAutoCommit();
connection.setAutoCommit(false);
//further code...
}
catch (SQLException e)
{
bcpLogger.error(e);
throw new ODSException("Error bulk copying data to SQL Server.", e);
}
Из исходного кода SQLServerBulkCopy, я вижу, конструктор имеет следующий код:
public SQLServerBulkCopy(Connection connection) throws SQLServerException {
loggerExternal.entering(loggerClassName, "SQLServerBulkCopy", connection);
if (null == connection || !(connection instanceof SQLServerConnection)) {
SQLServerException.makeFromDriverError(null, null, SQLServerException.getErrString("R_invalidDestConnection"), null, false);
}