java - 您可以使用 JDBC 仅连接到实例而不指定数据库吗?

标签 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 进行此查询?或者是否有更聪明的方法来完成相同的结果?

谢谢

最佳答案

您的“找不到合适的驱动程序”错误只是由于连接 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 是一个在所有数据库中都可用的系统 View ,因此据我所知,当您调用它时,当前数据库(目录)是什么并不重要。

关于java - 您可以使用 JDBC 仅连接到实例而不指定数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151423/

相关文章:

mysql - Sql Server Max() 通过分区 - 转换为 MySql

sql-server - 从字符串转换日期和/或时间时转换失败 - SQL Server 错误

java - 使用 latin-1 编码插入数据

java - 名称需要 LATIN 内部形式超过 30 个字节?

MySQL 5.7.20 - SELECT FOUND_ROWS() 返回错误结果

java - Hibernate JPA Oracle12C-主键(序列)上的约束冲突异常

java - 将 MonetaryAmount 转换为小单位长 (Javamoney)

java - 项目 Euler 14 - Java StackOverflowError

mysql - 如何实现从 mySQL 操作数据库到 Azure SQL 数据库的更新以进行报告

java - 斯坦福 POS 标记器 : How to preserve newlines in the output?