你可以使用JDBC连接到一个实例而不指定数据库吗?

时间:2017-02-10 04:15:55

标签: java sql-server jdbc

我正在开发一个JAVA应用程序,用于评估实例上所有数据库的数据和日志大小,并邮寄月度报告。我目前正在使用SQLServer2014。我正在使用SQL查询,通过查询sys.master_files来计算所有数据库的大小。

问题是当使用JDBC进行查询时,它会返回错误:

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

我已尝试连接到特定数据库,并且工作正常。有没有办法使用JDBC直接对sys.master_files进行查询?或者是否有更聪明的方法来完成相同的结果?

由于

1 个答案:

答案 0 :(得分: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与当前数据库(目录)无关。