Я получаю ошибку ниже
[Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt
Мой код
private static final String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static final String URL = "jdbc:odbc:sql2008";
private String[] entity = {"TABLE","VIEW"};
private ResultSet tables,columns,resultSet;
public void getData() throws SQLException, ClassNotFoundException{
Class.forName(DRIVER);
Connection connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
DatabaseMetaData data = connection.getMetaData();
resultSet = data.getCatalogs();
while (resultSet.next()) {
String dbName = resultSet.getString("TABLE_CAT");
if(dbName.toString().equals("db")){
tables=data.getTables(dbName, "%", "%", entity);
while (tables.next()) {
System.out.println(tables.getString("TABLE_NAME"));
}
}
}
}
URL-адрес - это DSN-соединение (соединение с использованием имени dsn), и я получаю эту ошибку при попытке получить таблицы, которые снова являются ResultSet, но его работа отлично работает в подключении без DSN, которое напрямую (с использованием адреса)
1 ответ
Вы повторяете два набора результатов одновременно:
while (resultSet.next()) {
while (tables.next()) {
Согласно сообщению об ошибке, это запрещено.
Вы можете исправить это, поместив результат первой итерации в List<String> databaseNames
и затем перебирая этот список, чтобы вывести таблицы.
В качестве альтернативы, если вы используете SQL Server 2005, вы можете попробовать включить в SQL Server функцию под названием "Несколько активных наборов результатов".
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.