2017-02-10 2 views
1

Я работаю над JAVA-приложением, которое оценивает данные и размеры журналов всех баз данных на экземпляре и отправляет ежемесячный отчет. В настоящее время я работаю с SQLServer2014. Я использую SQL-запрос, который вычисляет размер всех баз данных, запрашивая sys.master_files.Можете ли вы использовать JDBC для подключения к экземпляру без указания базы данных?

Проблема заключается в том, что при использовании JDBC, чтобы сделать запрос, он возвращает ошибку:

java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost" 

Я пытался подключиться к конкретным базам данных, и работает отлично. Есть ли способ сделать этот запрос непосредственно в sys.master_files с помощью JDBC? Или есть более умный способ для достижения того же результата?

Благодаря

+1

Как правило, RDBMS, работающая с вашим приложением, известна при развертывании. Можете ли вы рассказать о том, почему вы думаете, что вам нужно? –

+1

Ваш URL-адрес неверен, правильный URL-адрес для SQL Server начинается с 'jdbc: sqlserver:', а не 'jdbc: microsoft: sqlserver:'; посмотрите на https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url для правильного URL-адреса; и в соответствии с этой документацией имя базы данных является необязательным (оно будет подключаться к базе данных по умолчанию). –

ответ

1

Вашего «Нет подходящего драйвера найден» ошибка просто из-за некорректное подключение URL. jdbc:microsoft:sqlserver недействителен.

Что касается подключения к экземпляру без указания конкретной базы данных, это работает для меня:

// NB: no databaseName specified in the following 
String connectionUrl = "jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;integratedSecurity=true"; 

try (Connection conn = DriverManager.getConnection(connectionUrl)) { 
    String sql = "SELECT name FROM sys.master_files WHERE type_desc='ROWS' ORDER BY database_id"; 
    try (
      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery(sql)) { 
     while (rs.next()) { 
      System.out.println(rs.getString(1)); 
     } 
    } 
} catch (Exception e) { 
    e.printStackTrace(System.err); 
} 

Обратите внимание, что sys.master_files вид системы, которая доступна во всех базах данных, так AFAIK это не имеет значения какова текущая база данных (каталог), когда вы ее вызываете.

 Смежные вопросы

  • Нет связанных вопросов^_^