Hii,
我正在开发一个应用程序,我遇到了这个问题...我有这个GUI,我有很多按钮...每个按钮执行一些操作,如INSERT,SELECT,UPDATE,DELETE,VIEW等...在数据库上。我的问题是......
在此特定类的整个生命周期内打开一个连接并在此类不再使用时关闭更好...或者我应该立即打开数据库连接并立即关闭操作......
如果我选择第一种情况,如果我们需要进行一些处理,那么我们可以执行操作......在这种情况下,连接将是空闲的。
如果我选择第二种情况,它不会对频繁打开和关闭连接施加任何开销......鉴于用户只能从该屏幕执行数据库操作(假设)......
如果我们需要多个连接,Connection Pooling是最佳选择......?
我实际上不知道,如果我错了请纠正我......建立DB Conncetion会在内存方面给系统带来任何重大开销吗?
答案 0 :(得分:5)
一般来说,建议尽可能晚地打开连接,然后尽快关闭。是的,连接池在大多数主要系统中运行良好,与实际调用数据库相比,获得新连接的成本几乎可以忽略不计。
答案 1 :(得分:2)
为整个网络打开一个连接是否更好 这个特殊阶级的生命和 当这个班级不再出现时关闭 使用......或者我应该打开数据库 连接即时和关闭 立即进行操作 执行... 强>
打开连接并完成所有交易需要始终,一旦完成交易,提交然后关闭。
在并发系统中,为应用程序的每个会话调用创建工作线程,因此您不希望为每个工作线程创建每个JDBC事务连接。解决方案是连接池
来自Oracle的MySQL页面
什么是连接池?
连接池是一种技术 创建和管理池 准备好使用的连接 任何需要它们的线程。
这种“汇集”技巧 连接是基于这样的事实 大多数应用程序只需要一个线程 有权访问JDBC连接 当他们积极处理一个 交易,通常只需要 毫秒完成。什么时候不 处理交易, 否则连接会闲置。 相反,连接池允许 某些人使用空闲连接 其他线程做有用的工作。
实质上,连接池允许另一个线程可以使用空闲连接,而不是为每个线程创建连接。
请记住,数据库连接应该在很短的时间内打开(或者由于超时而导致最佳时间),这样您的SQL查询应该非常适合连接到DB的连接,获得结果并返回对象非常有效。
希望这有助于你的情况。
答案 2 :(得分:1)
在处理应用程序中的数据库时,您可能会考虑以下两点:
对于1.和2.没有必要反对为应用程序保留一个独占连接。只需确保事务逻辑以正确的方式工作即可。另外,不要忘记优雅地处理连接超时。
对于3.你肯定想拥有连接池并只在你真正需要的时候获得一个池连接。
关于开销:我认为这不是内存开销,而是可能的性能损失,尤其是在使用远程数据库时,因为每次执行“全新”连接时都需要初始化新的连接资源。
另外,根据您使用的框架/库,您可能希望了解它们如何支持您的数据库编程。
答案 3 :(得分:0)