当前位置: 技术问答>java相关
在servlet里访问数据库要不要建线程
来源: 互联网 发布时间:2015-03-02
本文导语: 在servlet里接受多个用户数据查询请求,要不要建线程,在没建线程的时候同时访问为什么会出错呢,先提交者执行,或者同时执行之后,数据出现错乱,是线程的问题吗? | 楼上的高人已经说明了。 解...
在servlet里接受多个用户数据查询请求,要不要建线程,在没建线程的时候同时访问为什么会出错呢,先提交者执行,或者同时执行之后,数据出现错乱,是线程的问题吗?
|
楼上的高人已经说明了。
解决办法是:
public Vector getConn() throws Exception
返回一个向量,即connection的数组,在初始化时调用一遍,每个servlet都是从vector中获得connection,用完后关闭之(要不然,很快到达最大连接数,而且造成memory leak)。
修改一下吧。
解决办法是:
public Vector getConn() throws Exception
返回一个向量,即connection的数组,在初始化时调用一遍,每个servlet都是从vector中获得connection,用完后关闭之(要不然,很快到达最大连接数,而且造成memory leak)。
修改一下吧。
|
你程序的毛病基本上可以确定为连接句柄在多线程环境下被其他用户调用覆盖而导致错误
当你激活对象Dataconn执行某个数据访问时,如果产生新的并发用户访问,那么你的连接句柄conn被覆盖为新值,那么你的前一个用户的数据访问还没执行完毕时,而它的连接却已经被改变了,这样岂能不导致错误???
我的建议是:把获取连接的方法拿出去,方到CLASS Dataconn 以外的地方去执行,在获得连接句柄以后,再把句柄作为一个参数传到Dataconn类里面。
当你激活对象Dataconn执行某个数据访问时,如果产生新的并发用户访问,那么你的连接句柄conn被覆盖为新值,那么你的前一个用户的数据访问还没执行完毕时,而它的连接却已经被改变了,这样岂能不导致错误???
我的建议是:把获取连接的方法拿出去,方到CLASS Dataconn 以外的地方去执行,在获得连接句柄以后,再把句柄作为一个参数传到Dataconn类里面。
|
servlet本身就是多线程服务的,
同时执行之后,数据出现错乱,不是线程的问题,是你程序中关于同步没搞好!
同时执行之后,数据出现错乱,不是线程的问题,是你程序中关于同步没搞好!