当前位置: 首页 > 知识库问答 >
问题:

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

祁晟
2023-03-14

我有一个使用本地安装Tomcat7的web开发项目。我正在尝试使用Microsoft的jdbc驱动程序(sqljdbc41.jar)连接到SQL Server 2012

sqljdbc41.jar位于我的应用程序构建路径中:

我正在出口它。此外,在Tomcat应用程序目录的< code>lib文件夹中,我还放置了< code>sqljdbc41.jar的副本。

没有编译错误,但是在运行时,当我尝试加载SQL服务器驱动程序时,我会得到以下结果:

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

以下代码块中引发异常:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://"+server+":1433;databaseName="+database+";user=sa;password="+password+";";
con = (Connection) DriverManager.getConnection(connectionUrl);

我看到很多关于这个话题的帖子都没有解决:

  1. java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver。SQLServerDriver:我是否加载了正确的驱动程序
  2. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b425c201-9882-4a48-b049-4004f202b0c6/javalangclassnotfoundexception-commicrosoftsqlserverjdbcsqlserverdriver?forum=sqldataaccess
  3. 正在获取代码为“Class.forName(”com.microsoft.sqlserver.jdbc.SqlServerDriver“);”的ClassNotFoundException

等等。

编译器级别1.7和JRE 1.7——根据文档,我相信我使用了正确的驱动程序。这也说明必须设置类路径:

echo $CLASSPATH
/var/common/sqljdbc41.jar

它是。此外:

java -version
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM)
64-Bit Server VM (build 24.75-b04, mixed mode)

那么,为什么我还是会遇到这种情况呢???

使现代化

我再次从微软下载了< code > sqljdbc 41 . jar

按照Mick Mnemonic的链接,我从Java Build路径中删除了jar,并将新下载的jar放在WEB应用程序的WEB-INF/lib文件夹中。然后我重新启动了Eclipse和Tomcat服务器,并清理了Tomcat server和项目。

仍在获取ClassNotFoundException

共有3个答案

刘瀚
2023-03-14

我想你需要在方言类上注册:org . hibernate . dialect . SQL server 2012 dialect

如果是Spring项目,它连接到一个文件application.properties:

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
    spring.datasource.url=jdbc:sqlserver:database;user=sa;password=password;
    spring.datasource.username=sa
    spring.datasource.password=password

但是这里将会完全像我不记得的那样

嵇丰
2023-03-14

您需要将库添加到catalina.properties,因为您在容器核心功能的上下文中使用数据库连接,而不仅仅是作为其中的子应用程序之一。

你可以否决我的答案,但我只要求你先测试一下。

程举
2023-03-14

代码< code > class . forname(" com . Microsoft . SQL server . JDBC . SQL server driver ")

无法抛出ClassNotFoundExcsion-com.microsoft.jdbc.sqlserver.SQLServerDRiver

因为名字不一样。有没有可能是你在代码中设置的不正确?

我从他们的网站下载了sqljdbc41.jar,看到类的正确名称是com.microsoft.sqlserver.jdbc.SQLServerDriver

$ jar tf sqljdbc41.jar | grep SQLServerDriver.class
com/microsoft/sqlserver/jdbc/SQLServerDriver.class

我刚刚在Microsoft的web文档中找到了这两个名称,所以他们要么在某个时候重命名了这个类(更改了它的包),要么在他们的一些文档中出现了错误。

您需要做的就是将该.jar放在Tomcat的lib目录中(例如.apache-tomcat-7.0.67\lib),然后重新启动Tomcat。

如果您在lib目录中有正确的类名和正确的jar,并且仍然看到该错误,我想知道您的eclipse设置中是否有某种类型的错别字,并且从eclipse部署是以某种方式强制尝试加载损坏的类名。(我不使用Eclipse,也不知道从那里部署)。

尝试创建一个非常简单的应用程序(不要告诉eclipse有关MS驱动程序类):

@WebServlet("/")
public class SimpleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // Set response content type
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println("<h1>" + "Welcome to the servlet!" + "</h1>");
        try {
            String server = "localhost";
            String database = "testDB";
            String password = "sapassword";

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://"+server+":1433;databaseName="+database+";user=sa;password="+password+";";
            Connection con = (Connection) DriverManager.getConnection(connectionUrl);
        } catch (ClassNotFoundException e) {
            out.println("<h2>" + e.getClass().getSimpleName() + "_" + e.getMessage() + "</h2>");
        } catch (SQLException e){
            out.println("<h2>" + e.getClass().getSimpleName() + "_" + e.getMessage() + "</h2>");
        } finally {
            out.println("<h1>" + "That's the end of the servlet!" + "</h1>");
        }
    }
}

并运行它。如果您看到如下输出:

Welcome to the servlet!

SQLServerException_The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

That's the end of the servlet!

这意味着驱动程序加载正确。连接失败b/c我当前没有运行SQLServer实例进行测试。

 类似资料:
  • 问题内容: 我正在IntelliJ中使用Maven。我有一类使用: pom.xml文件中的Maven依赖项: 我可以做并成功建立。但是当我尝试运行它时,我得到: 错误:java.lang.ClassNotFoundException:org.json.JSONObject 我在这里还有什么想念的吗?谢谢! 问题答案: 将json jar 添加到您的类路径 或使用 或将其添加到您的Maven pom

  • 问题内容: 我正在尝试进行Google Maps活动,但是出现LogCat错误,我的应用程序崩溃了。注册API密钥时,我使用了android提供的编码,所以我不知道为什么它不起作用。我需要帮助解决此问题。 LogCat XML文件 Java文件 问题答案: 在文件中添加这样的内容。

  • 问题内容: 这是我的错误代码。我的已导入为外部罐子。 堆栈跟踪: 问题答案: 这行导致,因为您尚未将文件放置在项目的lib文件夹中。或您尚未设置所需罐子的

  • 问题内容: 因此,我今天在开发Android程序时遇到问题。我有一个将XML字符串转换为Java对象(第三方)的类,并且可以在常规Java项目中正常工作,但是在Android上却收到以下奇怪错误: 我出于明显的原因隐藏了我的应用程序名称和程序包,但我想知道是否有人遇到过此类问题。类在正确的包中,这是我添加的库。我之前引用的其他类也可以进行。还有其他原因抛出吗? 谢谢杰克 问题答案: 这是我目前拥有

  • 我将测试web存档打包如下: 你知道我为什么会犯这样的错误吗?

  • 问题内容: 我正在编写第一个Hadoop应用程序,但出现错误。我不太了解此堆栈跟踪中的一些细节是什么意思。这是一个。我正在Ubuntu Linux v12.10,Eclipse 3.8.0,Java 1.6.0_24上构建它。我通过从Apache站点下载并使用Ant构建它来安装Hadoop。 创建工作时,我的崩溃发生在程序的第一行。 控制台输出: 问题答案: 您应该添加找到的所有jar,以避免此类