2017-02-10 7 views
1

私はインスタンス上のすべてのデータベースのデータとログのサイズを評価し、月間レポートをメールするJAVAアプリケーションに取り組んでいます。私は現在、SQLServer2014で作業しています。私はsys.master_filesを照会してすべてのデータベースのサイズを計算するSQL照会を使用しています。私は特定のデータベースに接続しようとしているデータベースを指定せずにJDBCだけを使用してインスタンスに接続できますか?

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

、それが正常に動作します:

問題は、クエリを作るためにJDBCを使用した場合、それはエラーを返すことです。 JDBCを使用してsys.master_filesに直接このクエリを実行する方法はありますか?それとも、同じ結果を達成するためにもっとスマートな方法がありますか?

おかげ

+1

一般的に、アプリケーションを実行しているRDBMSは、デプロイ時に認識されます。なぜあなたはこれが必要だと思うかについて詳しく説明できますか? –

+1

URLが間違っています.SQL Serverの正しいURLは 'jdbc:microsoft:sqlserver:'ではなく 'jdbc:sqlserver:'で始まります。正しいURLについてはhttps://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-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は、すべてのデータベースで利用可能なシステムの図であり、そう私の知る限り、それは問題ではないこと現在のデータベース(カタログ)は、あなたがそれを呼び出すときのものです。

関連する問題