繁体   English   中英

Why is my code giving me the java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver error in my web application?

[英]Why is my code giving me the java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver error in my web application?

我已经构建了一个动态 web 项目,该项目在 .jsp 文件中询问客户的基本信息。 然后这些信息由 servlet 处理并传递给 DAO,以便我可以将数据存储在 mssql 中。 当在 DAO 上调用addHost()方法时,我收到java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver错误。

我认为我的驱动程序有问题,所以我尝试在同一个项目中运行代码,但就像使用main(String[] args)的常规 java 应用程序一样。 它工作得很好,所以我无法理解为什么这段代码不能通过 web 应用程序工作。

有人可以向我解释为什么只有当我通过 web 应用程序运行该方法时才会出现此错误吗?

public void addHost(Host userHost) throws ClassNotFoundException, SQLException {

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String url = "jdbc:sqlserver://localhost:1433;databaseName=Hosts;integratedSecurity=true;";
        Connection con = DriverManager.getConnection(url);

        try {
            String query = "insert into HostsInfo values(?,?,?,?,?);";
            PreparedStatement pstmt = con.prepareStatement(query);
            pstmt.setString(1, userHost.getName());
            pstmt.setString(2, userHost.getEmail());
            pstmt.setString(3, userHost.getPword());
            pstmt.setString(4, userHost.getCity());
            pstmt.setInt(5, userHost.getGuestCount());          
            pstmt.executeUpdate();
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            con.close();
        }
}

当您在应用程序服务器之外使用 JDBC 时,DriverManager class 管理连接的建立。 向 DriverManager 指定要尝试与之建立连接的 JDBC 驱动程序。 最简单的方法是在 class 上使用 Class.forName() 来实现 java.ZAC5C74B64B4FBAC8352EFDriver 接口184B4FBAC8352EFDriver接口184AF。 对于 MySQL 连接器,此 class 的名称为 <>。 使用此方法,您可以使用外部配置文件来提供驱动程序 class 名称和驱动程序参数,以便在连接到数据库时使用。

你可以这样做:

public class LoadDriver {
    public static void main(String[] args) {
        try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception ex) {
            // handle the error
        }
    }
}

将驱动注册到 DriverManager 后,您可以通过调用 DriverManager.getConnection() 获取连接到特定数据库的 Connection 实例。

我的web/WEB-INF/lib文件夹中没有驱动程序。 一旦我还将驱动程序( mssql-jdbc-8.2.2.jre8 )放在web/WEB-INF/lib文件夹中,代码运行良好,没有运行时错误,并将数据顺利传输到数据库。

显然,对于 web 应用程序,仅在类路径中包含驱动程序是不够的。 它还需要包含在web/WEB-INF/lib文件夹中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM