【问题标题】:Why is my JDBC connection only failing when deployed through Jetty?为什么我的 JDBC 连接只有在通过 Jetty 部署时才会失败?
【发布时间】:2018-12-03 11:11:15
【问题描述】:

假装,我是网络开发的新手。我有一个通过 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;
}

谢谢。

【问题讨论】:

  • 这听起来像是一个构建错误,实际上。也许 JDBC JAR 没有进入在 Je​​tty 上运行的应用程序的类路径中。你应该检查一下。顺便说一句,如果您正在测试一个实际的数据库,那么它不是一个单元测试,它是一个 集成 测试。
  • @TimBiegeleisen 感谢蒂姆的指导。你知道我将如何检查类路径吗?
  • 打开你的 WAR/JAR 并四处寻找。像jar -tvf your_jar.jar 这样的东西应该可以工作。
  • 不要在 Web 应用程序中使用 DriverManager。请改用正确配置的数据源。

标签: java jdbc web-applications jetty


【解决方案1】:

你必须在Jetty的classpath中添加数据库的驱动。

检查它是否存在。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 2018-04-13
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多