2

我正在以大学项目的小型论坛的形式制作网络服务。Web 服务提供了一系列访问和修改数据库的方法,然后 JSP/servlet 将使用该 Web 服务将论坛呈现给用户。

我已经设置了所有方法,但我仍然不确定如何正确设置我的数据库连接。现在我Connection在 web 服务类文件中有一个对象,并且在类的构造函数中建立了连接。我在所有方法中一直使用该连接对象,因此它们都依赖于正在运行的构造函数。我不确定这是否正确。

有没有更好的方法来做到这一点?一位讲师告诉我,每次有人访问页面时都会创建一个 Web 服务实例,这对我来说听起来像是一项昂贵的操作。

编辑:我查看了连接池以及到目前为止我发现的所有内容(包括这需要额外的库。我仅限于库存 Java SE/EE 而没有额外的库,所以这是不可能的。

4

3 回答 3

1

这是一个非常糟糕的主意。你不应该有一个Connection共享的对象。它不能像那样扩展,而且它不是线程安全的。

更好的方法是使用连接池。在需要的时候获取连接,使用它,在同一个方法的范围内关闭它。

我认为您的朋友被误导了:Web 服务应该独立于任何页面,独立于任何页面。它由容器管理。它可能是单例对象或池对象,但您不会为每个页面创建一个。

于 2012-09-13T11:33:55.897 回答
0

最好发布一些代码,但是从简短的解释中会想到几个问题:

  1. 您没有汇集在任何实际负载下都不会非常有效的连接。
  2. 创建连接很昂贵,因此如果您非常频繁地执行构造函数,那么您将创建很多连接。
  3. 你在哪里关闭连接?
  4. 确保防止 sql 注入。
于 2012-09-13T11:36:32.933 回答
0

您不应该在构造函数中创建连接,因为您很可能会遇到很多不活动、连接状态、io 问题......

我宁愿使用 Apache 库中的 DataSource,例如BasicDataSource.

BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:...");
dataSource.setUser(...);
dataSource.setPassword(...);

然后,在您的 Web 服务的每个方法中,您调用dataSource.getConnection()以获取连接。正如另一个答案中所建议的,在内部,它使用连接池。

于 2012-09-13T11:37:21.037 回答