Dao工具类能写成static方式吗?反复不定时出现"结果集关闭"或"空指针"问题的解决

在使用Java进行Ajax请求时,遇到jdbc异常,如空指针、结果集关闭等问题。通过更换驱动、增加c3p0连接池等尝试未解决问题。最终发现,Dao工具类中静态的数据库连接和结果集在并发请求时导致冲突,修改为非静态并每次新建实例后问题得到解决。
摘要由CSDN通过智能技术生成

环境:SQL Server 2000 ,Java7u55,TomCat

这几天在做Ajax过程中,发现了一个很严重的问题,

一个页面上,有三处get请求,在运行时经常随机出现各jdbc错误:

驱动中报异常:

1.空指针

2.结果集已关闭

3.socket closed

4....

5.很多种,想不起来了,

反正各种异常,问题是有一半的时间它是好用的,同一个页面有时又不好用了.最怕的就是这种现象啊,

解决过程:

1.由于SQL Server2000较老,怀疑是驱动问题,换了驱动,无果

2.怀疑连接打开太慢,加了c3p0连接池后,问题依旧

3.加入了各种调试语句,没有发现空指针的地方.

 

问题进入僵局.

 

看着自己写的Dao工具类,逻辑上没有发现不正确的地方,就是个简单的Jdbc调用过程.

但想到出现问题主要是在一个页面中有多次请求时,在一次请求的情况下并不出错,所以怀疑是并发方面的问题

突然想到自己为了偷懒,把工具类的执行方法写成了静态方法,把connection与ResultSet等数据库对象都写成了Static,

那么在快速的两次执行时,第二次在第一次没有结束时就开始执行,会不会是第二次与第一次干扰了呢,?

想到这里,我把Dao中数据库的cn和rs对象的Static去掉,把Dao类每次执行Sql语句时都New一下,问题解决

 

问题代码如下:

	    ResultSet rs=DaoDs.runSelect(sql, p);
	   //...使用Rs工作
	    DaoDs.close();//关闭相关对象

Dao工具类:cn,rs都是static的

	public static Result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值