为什么只有通过Jetty部署时,我的JDBC连接才会失败?

时间:2018-12-03 11:11:15

标签: java jdbc web-applications jetty

冒充,我是Web开发的新手。我有一个通过Jetty部署的Java Web应用程序,但我遇到的一个问题确实使我感到困惑。为了在Web应用程序中显示数据库中的数据,我必须建立数据库连接,当我对代码进行单元测试时可以这样做,但是当我从.jsp页面调用相同的方法来填充Web应用程序时,我得到了消息告诉我:

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost:1433;integratedSecurity=true;database=TicketITBookingSystemDatabase;loginTimeout=30;

以下是相关代码的其余部分:

public void queryDatabase(String query){

ResultSet resultSet = null;
String connectionUrl = establishDatabaseConnection();

try (Connection connection = DriverManager.getConnection(connectionUrl);
     Statement statement  = connection.createStatement();) {

    //Execute the sql statement passed as the query parameter.
    resultSet = statement.executeQuery(query);
    processResultSet(resultSet);
    statement.close();
}
// Handle any errors that may have occurred.
catch (SQLException e) {
    e.printStackTrace(); //why is this being hit but only on the web build
}

被调用的事件:

public List<String[]> getAllEvents(){
    queryDatabase("EXEC dbo.sp_GetAllEventDetails");
    return events;
}

谢谢。

2 个答案:

答案 0 :(得分:0)

您必须在Jetty的类路径上添加数据库驱动程序。

检查是否存在。

答案 1 :(得分:0)

问题是您没有将驱动程序jar添加到Jetty的类路径中,或者-如果您将其与应用程序一起部署-您需要使用Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")显式加载驱动程序。 JDBC自动驱动程序加载仅在驱动程序位于初始类路径上时起作用,而不是在上下文类路径上。

但是,通常不建议直接从Web应用程序使用DriverManager。通常使用DataSource更好,尤其是在数据源实现提供连接池的情况下。