我应该如何在Java Web服务中设置数据库连接?

时间:2012-09-13 11:27:44

标签: java database jdbc

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

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

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

编辑:我看了一下连接池和我到目前为止发现的所有东西(包括这需要额外的库。我只能在没有附加库的情况下存储Java SE / EE,所以这是不可能的。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

  1. 你没有汇集在任何实际负载下都不会非常有效的连接。
  2. 创建连接非常昂贵,因此如果您经常执行构造函数,那么您将创建大量连接。
  3. 你在哪里关闭连接?
  4. 确保防止sql注入。

答案 2 :(得分:0)

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

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

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

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

相关问题