求助!关于使用sql datasource的问题!100分

smagt 2004-10-19 11:05:02
datasource如下:
<local-tx-datasource>
<jndi-name>FtDB</jndi-name>
<connection-url>jdbc:microsoft:sqlserver://10.80.1.220:1433;DatabaseName=northwind</connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name>sa</user-name>
<password>123</password>
<check-valid-connection-sql>select @@version</check-valid-connection-sql>
<min-pool-size>2</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>1</idle-timeout-minutes>
<BlockingTimeoutMillis>5000</BlockingTimeoutMillis>
</local-tx-datasource>
连接池的配置,naming都没有问题,可以正常的通过datasource取得connection。
我将最大连接数设为20,连续20次访问数据库之后,第21次由于数据库没有空闲的连接而报错,
错误原因是在指定的block时间之内<BlockingTimeoutMillis>5000</BlockingTimeoutMillis>
没有可以使用的ManagedConnection了,这是为什么?我每次使用完都关闭了连接了啊,顺便问一句在sqlserver中如何查看当前的连接数?是进城信息里的哪些进程与锁吗?
还请高手指点迷津!谢过!
代码:
Connection conn = null
try {
DataSource ds = ... 正常找到DataSource
conn = ds.getConnection();
...数据库操作
}catch() {
...异常操作
}finally{
conn.close();
}

...全文
92 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
guojiafuzhuxi 2004-10-20
DataSource只NEW一次就可以了,从那里看。照楼上说的。楼主还不如写个公共的连接数据据库类!
回复
禽兽v5 2004-10-20
DataSource是一个池,如果你每用一次就释放,那就不能发挥池的作用了。
回复
yujiabian 2004-10-20
cm4ever(小P)兄,我赞同你的观点,不过我也可以释放DataSource对象阿
回复
zhonghua2003 2004-10-20
我也爱敏敏,顶~~~~~~~~~
回复
禽兽v5 2004-10-19
你问题多发了一个吧,赶快删除,只要有人回复就删除不了,那100分就浪费了。
回复
禽兽v5 2004-10-19
如果是查询,ResultSet也要记得close
回复
禽兽v5 2004-10-19
DataSource只要初始化1次就可以了。单独写一个DbPool类,如下:

public class DbPool
{
private DataSource ds = null;

public static Connection openConnection()
{
if ( ds == null )
{
// 初始化datasource
}

return ds.getConnection();
}

public static void closeConnection(Connection conn)
{
if ( conn != null )
{
conn.close();
}
}
}

使用:
Connection conn = null
try {
conn = DbPool.openConnection();
...数据库操作
}catch() {
...异常操作
}finally{
DbPool.closeConnection(conn);
}
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告