iteye_10600 2009-02-07 19:05
浏览 549
已采纳

一个Webservice 服务,多次重复调用其中某个方法,出现错误。

做了一个 xfire 的Webservice 服务,提供给FLEX 调用。

其中有个操作是重复多次调用某一个方法 getStaticEntiy()有时不定出现以下的一些错误:

 

                  java.sql.SQLException: Connection  is closed

 

                 java.sql.SQLException: Invalid state, the ResultSet object is closed.

 

 

但是,我把下面的这些方法放到web项目 里面,让jsp页面调用,获取数据,随便怎么频繁的刷新页面获取数据,都能正常获取,就是放到Webservice里面不正常。

获取数据库链接是,通过 TOMCAT连接池 来获得的。

下面是部分代码:

public byte[] getStaticEntiy(String pmname, int scalesize, float x, float y)
    {
        byte[] bContent = null;
        try
        {
            conn = DBPool.getPool().getConnection();    //获取连接池中的链接

            bContent = scaledao.getStaticEntiyData(pmname, scalesize, x, y, conn);  //这是从数据库读取数据的方法   
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(conn!=null){
                try
                {
                    conn.close();                   //释放链接
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
        
        return bContent;
    }

 

public byte[] getStaticEntiyData(String pmname, int scalesize, float x, float y,Connection conn)
    {
        byte[] bContent = null;
        ByteArrayOutputStream out = new ByteArrayOutputStream(500000);
        IOdeal bs = new IOdeal();
        
        sql = "select s.descript from (staticentity s inner join scale s1 on s1.scaleid = s.scaleid) " +
            " inner join projectmap p on p.pmid = s1.pmid " +
            " where p.pmname=? and s1.scalesize=? and s.x=? and s.y=?";
        try
        {
            ps = conn.prepareStatement(sql);
            ps.setString(1, pmname);
            ps.setInt(2, scalesize);
            ps.setFloat(3, x);
            ps.setFloat(4, y);
            rs = ps.executeQuery();
            while(rs.next())
            {
                bs.writeFileStream(rs.getBinaryStream(1), out);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }       
        bContent = out.toByteArray();
        try
        {
            out.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return bContent;
    }
  • 写回答

1条回答

  • bohemia 2009-02-08 12:13
    关注

    ps 和 rs都及时关闭.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名