无法使用 jdbc 连接到 MS SQL 数据库

Posted

技术标签:

【中文标题】无法使用 jdbc 连接到 MS SQL 数据库【英文标题】:Unable to connect to MS SQL database using jdbc 【发布时间】:2014-03-24 09:59:30 【问题描述】:

我正在尝试使用下面的 jdbc 连接到我的 MS SQL 2008 数据库,但它给出了错误

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection con = DriverManager
            .getConnection(
                    "jdbc:sqlserver://vermdbhqd01:1433;databaseName=irmreports",
                    "irm", "1234");

我的数据库名称是irmreports,实例名称是irm_dev。请告知我如何在 URL 中同时提供数据库实例名称和数据库名称。

它说

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'irm'.

但是当我尝试从 DB GUI 使用相同的用户名和密码登录时,它会登录。想知道在 jdbc 设置中在哪里提供数据库实例详细信息的详细信息

我也试过下面的方法不起作用

Connection con = DriverManager
.getConnection("jdbc:sqlserver://vermdbhqd01:1433;instanceName=IRM_DEV;databaseName=irmreports;user=irm;password=1234");

【问题讨论】:

您在与管理工作室连接时实际上是在使用用户名和密码,还是在使用 Windows 身份验证(集成安全)? 我正在使用 SQL 身份验证 设法使用 odbc 连接使其正常工作,但 jdbc 4 的问题仍然存在 【参考方案1】:

从连接字符串中删除端口详细信息后,我终于让它工作了,如下所示

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        Connection con = null;
        con = DriverManager
                .getConnection(

                "jdbc:sqlserver://vermdbhqd01;databaseName=irmreports;instanceName=irm_dev;selectMethod=cursor;user=irm;password=1234");

【讨论】:

这表明您的机器上有多个 SQL Server 实例。如果您指定端口号,则指定的instanceName 将被忽略,并且驱动程序会连接到在指定端口上运行的实例。 是的。你说的对。我们在 SQL 服务器上运行了多个实例,正如你所说,我认为它在提到端口时忽略了 instanceName。遗憾的是,任何 Microsoft JDBC 文档中都没有提到这一点 :(

以上是关于无法使用 jdbc 连接到 MS SQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

从 java 连接到 MS 访问

无法使用 JDBC 连接到远程 oracle 数据库

无法将 JDBC 连接到 SQL 服务器?

我无法使用带有 Android Studio 的 JDBC 连接到 SQL Server Express

无法使用 JDBC 连接到 sql 2008 express

无法使用 JDBC 驱动程序和 sql2o 连接到我的 Posgres 服务器