【问题标题】:Unable to connect to SQL Server via JDBC. No suitable driver found for jdbc:sqlserver://无法通过 JDBC 连接到 SQL Server。找不到适合 jdbc:sqlserver:// 的驱动程序
【发布时间】:2017-01-06 05:59:54
【问题描述】:

我只是想在我的 HTTP Servlet 程序中使用 SQL Server 数据库,但我的程序似乎无法连接到数据库。它给了我以下错误:

找不到合适的驱动程序 jdbc:sqlserver://localhost:1433;databaseName=Bookyard;integratedSecurity=true;

这是我的连接方式。

package practice.bookyard.server.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Database {

    public static Connection getConnection() {
        String url = "jdbc:sqlserver://(LocalDb)\\MSSQLLocalDB:1433;databaseName=Bookyard;integratedSecurity=true;";
        Connection connection = null;

        try {
            connection = DriverManager.getConnection(url);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return connection;
    }

}

我之前的服务器名称为 localhost:1433,但我将其更改为 SQL Server 实例名称 (LocalDb)\\MSSQLLocalDB:1433,但它似乎仍然使用旧名称。

另外,我不确定在连接到 SQL Server localdb 时如何提供正确的连接字符串。

我正在使用适用于 Java EE、Mars 2 的 Eclipse,并从 this website 下载了适用于 SQL 6.0 的 Microsoft JDBC 驱动程序。

我运行了安装程序,解压缩了结果文件夹的内容。然后,我将 sqljdbc42.jar 文件添加到构建路径中,因为我的目标是 JDK 1.8。

更新

根据 Scary Wombat 的建议,我还将 sqljdbc42.jar 文件的路径添加到我的类路径中。

但是,我仍然遇到同样的错误。

我很确定这是一个反射问题,因为类型加载器无法从我的连接字符串中解析驱动程序类型。这意味着,我使用的连接字符串语法是错误的。

我将连接字符串更改为如下:

String url = "jdbc:sqlserver://localhost:1433;
instance=(LocalDb)\\MSSQLLocalDB;
databaseName=Bookyard;integratedSecurity=true;";

但是,我仍然不仅收到相同的错误,而且我收到的异常消息仍然有我的旧连接字符串。所以,很明显,还有一些缓存正在进行,我只是不知道在哪里。谁在缓存我的连接字符串,我如何刷新/清除该缓存?

如果我连接到 localdb 而不是在主 SQL Server 实例上,您能否告诉我如何提供 SQL Server 实例名称?

【问题讨论】:

  • 您能否在 SQL Server 配置管理器中检查 TCP/IP 是否已启用?如果未启用,则需要启用它。如果我没记错的话,您可能还需要在进行此更改后重新启动系统。
  • jar 必须在你的类路径和你的构建路径上。 buildpath 仅用于编译
  • @ScaryWombat 如何将它放在类路径中?我完全是新手?那是环境变量吗?
  • @AdityaGupta 是的,TCP 已启用,我已从 .NET 应用程序连接到我的 SQL 实例一百万次。
  • @ScaryWombat CLASS_PATH 与 JAVA_HOME 不同吗?我有后一套。如果它不同,我必须将它设置为什么?文档太混乱了。

标签: java sql-server eclipse tomcat jdbc


【解决方案1】:

正如@ScaryWombat 和@JozefChocholacek 所暗示的那样,事实证明这是一个类路径问题。显然,您只需要复制和粘贴 sqljdbc42.jar 文件,而且该文件只能直接粘贴到 WEB-INF\lib 文件夹中,而不是任何子文件夹中。

我这样做了,它仍然给了我这个错误。

那是因为WEB-INF 文件夹结构,当我在Project Explorer 中查看它时,仍然具有旧的文件夹结构。于是,我在Project Explorer中的WEB-INF文件夹上右击,选择了Refresh命令。

我还更新了我的环境变量 CLASSPATH 以将其指向 WEB-INF 文件夹,该错误消失了。

【讨论】:

    【解决方案2】:

    你可以像下面那样做

    String url = "jdbc:sqlserver://YOUR PC NAME;instanceName=SQLEXPRESS;DatabaseName=dbname;integratedSecurity=true";
    
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection myCon = DriverManager.getConnection(url);
    

    注意:但是新版本的 jdbc 驱动程序不需要使用 class.forname 手动加载驱动程序类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多