JDBC数据库连接池问题

1,一个Connection对象,在一个时刻能不能创建多个Statement(经测试ORACLE貌似可以,其他未知)

2,一个Statement对象,在一个时刻是否可以查询出多个ResultSet(经测试ORACLE貌似可以,其他未知)

3,如果一个Connection可以同时执行多个Statement,那干嘛在连接池中创建一堆连接

4,如果说是一个Connection是因为同时执行的Statement数量是有上限的,才在池中创建多个连接,那么上限是多少,又怎么判断一个连接是否是繁忙的

5,一般的连接池实现(DBCP,C3P0)是在什么时候关闭连接的,是在连接出现SQLException时,还是在Statement查询超时的时候,statement有setQueryTimeout(seconds) 方法,那是设置查询超时的时间,还是设置命令执行超时的时间,比方像executeUpdate操作,如何判断是否超时

6,连接池是否应该在应用关闭时释放,close掉全部物理链接

7,在Web服务器正常关闭时,连接池该如何释放

8,在Web服务器异常终止时,连接池该如何释放

9,被Spring管理的 连接池 是否会在 Spring 容器销毁时 , 关闭全部连接

——————

经本机测试
Oracle 10g
一个Connection最多可以创建300个Statement
程序退出时,会自动释放数据库链接

其他数据库暂没有环境,无法测试
根据 tian36005274 的回答,及本机测试(基于ORACLE,MYSQL)
1,一个Connection上可以建多个Statement(ORACLE:300个,MYSQL:三万个以上,超过则程序异常终止)
2,一个Statement也可以查出多个ResultSet
3,4,因为要控制事务,所以要建多个Connection,我在考虑另一个问题,为什么提交事务是Connection的方法,而不是Statment的方法,如果每个Statement可以独立提交,是否可以提高性能吗?
5,6,7,8,9,经我对一些连接池的测试,连接池并不关闭物理链接,除非 查询超时,重试失败 或者 连接池比较空闲,超过最大的空闲连接数;在Web容器关闭时,连接池是自动释放的,Spring是怎么做的还没研究过

1.可以
2.可以
3.如果都用一个Connection,并发怎么办,事物怎么处理?
4.同上
5.(DBCP,C3P0)只是连接池,关闭连接是在程序中控制的。如果是用spring是在请求结束时spring自动关闭的。
6.不是,连接池的作用就是close连接是不close物理连接。
7.连接池是web应用层面东西。在Web服务器都关了,连接池就没有了啊。
8.同上。
9.“关闭全部连接”有语义歧义。
温馨提示:内容为网友见解,仅供参考
无其他回答

jdbc连接池总是满
你要问的是不是jdbc连接池总是满的怎么解决?解决方法如下:1、扩大链接池数量,治标不治本。2、检查程序,使用完的链接要关闭。jdbc是java语言提供的一套访问关系数据的接口。关系数据不仅仅是关系型数据库,也可以是一些关系型文件,只要相应的数据源提供实现jdbc接口的驱动。

数据库连接池连接超时报错
数据库连接池连接超时报错是由于数据库重启或空闲连接超时导致的问题。当数据库连接在等待状态超过设置的最大timeout时间时,数据库会强行断开连接,引发异常。默认情况下,MySQL的等待时间长达8小时,可以通过命令参数查看。解决此问题,可通过以下方法:重启服务器,数据库连接池会重新初始化,重新获取有效连...

遇到了一个WAS的jdbc连接池满的问题,求教
如果 record 关闭出异常了,那么 statments \\connection 都不会关闭,因为代码没有执行到,在record那个部分就跳出去了。第二个要看你数据库端,看看数据库的连接是否都被收回。第三个要看你的事务和并发,长事务,高并发是会出现连接池供不应求的。

jdbc链接池链接如何保持链接啊失效
调大mysql的两个timeout参数。jdbc链接池链接保持链接调大mysql的两个timeout参数,连接池中的链接失效了,链接超时后被mysql关闭了,调大mysql的两个timeout参数即可。连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、...

jdbc编程的异常类型是什么?
那些你不知道的 JDBC 异常类型:(1)java.sql.SQLException: connection holder is null。连接超时,主要是 update 或者select 的数据量太大超过,连接持有时间。解决方式;分片查询 最好 2000以内,查询出来就立刻处理。否则数据量大的时候,会占用很多的JVM内存。对应配置:主要是数据库连接池的配置, ...

jdbc连接池只是可以连接数据库,还未检验用户名密码吧
要检验用户名密码。JDBC连接池在获取连接时会验证用户名和密码。传统的JDBC连接使用DriverManager来获取连接时,每次连接都需要将Connection加载到内存中,并验证用户名和密码。

数据库连接池会报Cannot create JDBC driver of class '' for con...
从现象上来看,是你数据库配置没找到连接url,应该找到了你的jar包了。查一下jndi在程序里配的名字是不是jdbc\/sqlserver

网页显示无法打开JDBC连接事务;嵌套异常java.sql.SQLException:无法连 ...
这种情况一般是数据库连接串有问题,没设置对,或者连接池用户数已经满都可能出现无法链接的问题。如果链接正常,而仅仅在做事务处理的时候有异常。可能的情况:你的当前数据库链接在已经启动一个事务,未提交的情况下,又开启了一个新的事务。造成要操作的数据表锁定。如果数据链接正常的话,楼主要给出更...

dbcp连接池远程连接数据库的时候,超慢。本地是很快,远程连接在下面一段...
那个我现在可以告诉你答案了,其实用连接池远程链接数据库太慢 不是程序问题 而且 不能说他太慢 我做了一个测试 ,以下是简易表格 循环次数 本地\/远程 是否使用连接池 消耗时间 10000 本地 是 5553ms左右 10000 本地 否 85553ms左右 10000 远程 是 85553ms左...

JDBC常见面试题
JDBC的DriverManager用于加载数据库驱动,ResultSet是查询结果集接口,DataSource用于获取数据库连接,提供连接池功能。如何创建连接池:使用DataSource与Apache Tomcat的JNDI结合,通过配置文件实现。Apache DBCP介绍:提供一个统一的DataSource实现,作为应用程序与不同JDBC驱动之间的抽象层。常见的JDBC异常:...

相似回答