gpt4 book ai didi

sql-server - ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

转载 作者:行者123 更新时间:2023-12-02 09:34:13 25 4
gpt4 key购买 nike

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

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

enter image description here

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

没有编译错误,但在运行时,当我尝试加载 SQL Server 驱动程序时,出现以下错误:

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 : Am I loading the right driver?
  2. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b425c201-9882-4a48-b049-4004f202b0c6/javalangclassnotfoundexception-commicrosoftsqlserverjdbcsqlserverdriver?forum=sqldataaccess
  3. Getting ClassNotFoundException on code: "Class.forName("com.microsoft.sqlserver.jdbc.SqlServerDriver");"

还有更多。

编译器级别 1.7 和 JRE 1.7 - 根据 documentation ,我相信我使用的是正确的驱动程序。这也表明必须设置 CLASSPATH:

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)

那么,为什么我还是会遇到这个???

Update

我再次从 Microsoft 下载了 sqljdbc41.jar - 只是为了确保第一个 jar 没有损坏。

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

仍然收到ClassNotFoundException

此外,Eclipse IDE 可以看到驱动程序: enter image description here

最佳答案

代码 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

不能 throw ClassNotFoundException - 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!

这意味着驱动程序已正确加载。连接失败,因为我当前没有运行 SQLServer 实例来进行测试。

关于sql-server - ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com