Мне нужно извлечь данные из базы данных удаленного сервера Sql. Я использую mssql jdbc драйвер .
Я заметил, что часто при извлечении строк из базы данных процесс неожиданно зависает, не давая ошибок. Он просто застрял, и больше строк не обрабатывается.
Код для чтения из базы данных следующий:
String connectionUrl = "jdbc:sqlserver://10.10.10.28:1433;databaseName=MYDB;user=MYUSER;password=MYPWD;selectMethod=direct;sendStringParametersAsUnicode=false;responseBuffering=adaptive;";
String query = "SELECT * FROM MYTABLE";
try (Connection sourceConnection = DriverManager.getConnection(connectionUrl);
Statement stmt = sourceConnection.createStatement(SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY, SQLServerResultSet.CONCUR_READ_ONLY) ) {
stmt.setFetchSize(100);
resultSet = stmt.executeQuery(query);
while (resultSet.next()) {
// Often, after retrieving some rows, process remains stuck here
}
}
Обычно соединение установлено правильно, некоторые строки выбираются, чем в какой-то момент процесс может застрять в получении следующего пакета строк, не давая ошибок и не обрабатывая новую строку. Это случается иногда, а иногда - успешно.
AFAIK, единственная причина, которую я вижу, состоит в том, что в какой-то момент возникает проблема соединения с удаленным компьютером, но не должен ли я быть уведомлен об этом от водителя?
Я не уверен, как мне следует обрабатывать ситуации такого типа ... могу ли я что-то сделать на моей стороне, чтобы процесс завершился, даже если возникла временная проблема с удаленным сервером (конечно, если соединение не подлежит восстановлению, я ничего не могу сделать)?
В качестве другого теста вместо драйвера java jdbc я использовал утилиту bcp для извлечения данных из удаленной базы данных, и даже с этой встроенной утилитой я могу наблюдать ту же проблему: иногда она успешно завершается в других случаях он извлекает некоторые строки (скажем, 20000), а затем застревает, ошибок нет и строки не обрабатываются.