读书人

tomcat连接池,重复多次调用方法出错:

发布时间: 2012-02-02 23:57:14 作者: rapoo

tomcat连接池,重复多次调用方法出错: Connection is closed
配置了一个tomcat连接池,

然后多次重复调用下面方法getStaticEntiy() ,部分能获取数据,部分报错误:java.sql.SQLException: Connection is closed

大家帮忙看看,是什么原因导致的?看看有什么优化方法 ?谢了!!

--获取连接池--

Java code
public class DBPool{    private static DataSource    pool;    static    {        Context env = null;        try        {            env = (Context) new InitialContext().lookup("java:comp/env");            pool = (DataSource) env.lookup("jdbc/DBpool");            if(pool == null)                System.err.println("'DBpool' is an unknown DataSource");        }        catch (NamingException ne)        {            ne.printStackTrace();        }    }    public static DataSource getPool()    {        return pool;    }}



--getStaticEntity() 方法:--
Java code
public byte[] getStaticEntiy(String pmname, int scalesize, float x, float y)    {        byte[] bContent = null;        try        {            conn = DBPool.getPool().getConnection();    //获取连接池中的链接            bContent = scaledao.getStaticEntiy(pmname, scalesize, x, y, conn);    //这是一般的从数据库读取流数据的方法            }        catch (SQLException e)        {            e.printStackTrace();        }        finally        {            if(conn!=null){                try                {                    conn.close();                   //释放链接                }                catch (SQLException e)                {                    e.printStackTrace();                }            }        }                return bContent;    }




[解决办法]
conn = DBPool.getPool().getConnection(); //获取连接池中的链接

-----------------------------------------------------
在这个论坛上我也说过很多次了,如果没有很高的面向对象程序设计水平,请不要把数据库连接对象:
Connection, PreparedStatement, ResultSet 等设为成员变量!因为设成成员变量在多个请求同时访
问时会产生严重的问题(大量的数据库连接无法释放),特别是在设计不是很好的情况下。

因此建议将这些对象置为局部变量。

读书人网 >Java Web开发

热点推荐