如何修复:找不到适合 jdbc:sqlserver 的驱动程序 [重复]

Posted

技术标签:

【中文标题】如何修复:找不到适合 jdbc:sqlserver 的驱动程序 [重复]【英文标题】:How to fix: No suitable driver found for jdbc:sqlserver [duplicate] 【发布时间】:2019-04-20 10:11:11 【问题描述】:

我正在尝试连接到与应用程序在同一台计算机上运行的 MS SQL Server 数据库,但我不断收到错误消息:

找不到合适的驱动程序 jdbc:sqlserver://localhost:1433;database=SQLTEST;user=TEST;password=1234567890;encrypt=true;trustServerCertificate=false;loginTimeout=30;

我正在运行 MS SQL Server 2017 和 JDK1.8.x。

我做的第一件事是使用 T-SQL 在 SSMS 中通过以下方式创建用户:

USE SQLTEST
CREATE ROLE TEST
GRANT SELECT, INSERT ON SCHEMA :: [dbo] TO TEST
CREATE LOGIN TEST_LOGIN WITH PASSWORD = '1234567890'
CREATE USER USER_TEST FROM LOGIN TEST_LOGIN
ALTER ROLE TEST ADD MEMBER USER_TEST

然后我使用 Maven 在 pom.xml 文件中将驱动程序添加到我的项目中:

<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
     <groupId>com.microsoft.sqlserver</groupId>
     <artifactId>mssql-jdbc</artifactId>
     <version>7.2.2.jre8</version>
</dependency>

随后添加和更改 Microsoft 给出的示例代码(注意这应该成为 JAX-RS REST-API,这就是注释存在的原因):

@Path("t2")
public class T2 
    @GET
    public String show() 
        String r = "";
        String connectionUrl =
                "jdbc:sqlserver://localhost:1433;"
                        + "database=SQLTEST;"
                        + "user=TEST;"
                        + "password=1234567890;"
                        + "encrypt=true;"
                        + "trustServerCertificate=false;"
                        + "loginTimeout=30;";

        try (Connection connection = DriverManager.getConnection(connectionUrl);) 
            // Code here.
        
        // Handle any errors that may have occurred.
        catch (SQLException e) 
            e.printStackTrace();
            r = e.getMessage();
        
        return r;
    

运行此命令会导致本文开头给出的错误。我是忘记了什么还是做错了什么?

【问题讨论】:

你不应该在Web应用程序中直接使用DriverManager,而是使用带有连接池的数据源(例如Apache DBCP、HikariCP等)。问题是,如果驱动程序部署在 Web 应用程序中,您需要显式加载驱动程序(自动驱动程序加载仅适用于主类路径上的驱动程序,不适用于 Web 应用程序特定类路径上的驱动程序)。 【参考方案1】:

看起来类似于这个问题:

java.sql.SQLException: No suitable driver found for jdbc:sqlserver

看起来你没有 Class.forName("xxxx");在 try 语句中的 DriverManager.getConnection 部分之前。

【讨论】:

使用这些较新版本的 jdbc,7.2.2.jr8,我认为您不再需要使用 Class.forName。我很惊讶这被认为是正确的答案。

以上是关于如何修复:找不到适合 jdbc:sqlserver 的驱动程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException: 找不到适合 jdbc:sqlserver 的驱动程序... (intellij, maven)

如何修复:“找不到适合 jdbc:mysql://localhost/dbname 的驱动程序”

在其他电脑上 java.sql.SQLException:没有找到适合 jdbc:sqlserver 的驱动程序

如何修复:“找不到适合 jdbc:mysql://localhost/dbname 的驱动程序”错误

如何修复“找不到名称'ClipboardItem'”错误?

如何修复找不到模块'fs'