[英]java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
[英]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.