当我了解reader
.NET 的功能时,我才知道我们只能打开reader
一对一的数据库连接。所以我必须使用连接池,这样我的应用程序才能正常工作而不会崩溃,在这种情况下,我也不能为我的连接应用单例模式。但是现在当我开始用 Java 开发相同的应用程序时,我发现我可以用相同的连接做很多事情,而且我也可以在连接上应用单例模式。我只需要每次都创建语句对象。
现在我的问题是:
- 为什么 .NET 对 db 连接对象有这个限制?
- 如果 Java 允许这样做,那么我们为什么要使用连接池呢?
当我了解reader
.NET 的功能时,我才知道我们只能打开reader
一对一的数据库连接。所以我必须使用连接池,这样我的应用程序才能正常工作而不会崩溃,在这种情况下,我也不能为我的连接应用单例模式。但是现在当我开始用 Java 开发相同的应用程序时,我发现我可以用相同的连接做很多事情,而且我也可以在连接上应用单例模式。我只需要每次都创建语句对象。
现在我的问题是:
Connection
不,你不能在 Java中一次做任意多的事情。您可能会逃脱一些事情,但一般来说Connection
,Java 中的 a 一次只能用于一件事(由单个线程)。如果交易开始发挥作用,那就更重要了,因为它们绑定到Connection
.
从它的声音看,.NET 的行为看起来完全一样,但是你很幸运,你在 Java 中尝试过。
Java中正确的做法是使用连接池,每次你做一些业务操作时,从池中获取一个连接,用那个连接做数据库操作,然后将连接返回到池中(通过简单的调用.close()
,好东西是你真的不需要关心连接是来自池还是每次请求时都重新创建)。
我怀疑在.NET 中它非常相似。
因为与数据库的实际连接以这种方式受到限制。Java 中的连接对象只是在需要时打开更多的数据库连接。有一个设置可以让 .NET 中的连接对象做同样的事情,但我建议您使用默认模式,因为它可以让您更好地控制资源。
因为Java中的连接对象会从池中获取数据库连接。如果它会打开一个到数据库的新连接,那么当您将连接对象用于多个阅读器时,您会看到相当大的性能差异。