环境: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