InputStream不能序列化吧?所以返回InputStream可能不行

解决方案 »

  1.   

    public class Program2 
    {
     InputStream in = null;
     Statement stmt = null;
     Resultset rs = null;
         
     public void getInputStream()
     {
     }
     public void showPicture(HttpServletResponse response) 
     {
     }
    }
      

  2.   

    给你一些资料,希望有帮助A LOB locator is a handle to a LOB. Liks you have a handle to a file in
    C which is an abstract reference you can have a handle (or pointer if
    you like) to the LOB. Using LOB locators avoids shipping LOBS back and
    forth between client and server.a LOB locator does not refer to an actual value for various
    reasons.
      

  3.   

    To albert_qhd(浪子) :
       应该怎么改?我想在Program2.getInputStream()里返回数据库的blob字段内容
    To takecare(大厅) :
       在我的源程序里,所有的变量都得到了定义,所以您说的该问题不存在。
      

  4.   

    补充,如果你在
    public class Program1 extends HttpServlet
    {
    public void service(HttpServletRequest request,HttpServletResponse  response) throws ServletException,IOException
      {
         Program2 p2 = new Program2();
         p2.showPicture(response,p2.getInputStream());  }
    }
    加载数据库连接然后
    在该类中定义Connection Statement ResultSet初始化的值为null;
    然后将它们传递到Program2中可能正常工作凭借感觉,乱说的。
      

  5.   

    你在Program2内定义了一个in,那执行完p2.getInputStream()后者个in可以直接在你的showPicture内使用
      

  6.   

    补充,如果你在
    public class Program1 extends HttpServlet
    {
    public void service(HttpServletRequest request,HttpServletResponse  response) throws ServletException,IOException
      {
         Program2 p2 = new Program2();
         p2.showPicture(response,p2.getInputStream());  }
    }
    该类中定义Connection Statement ResultSet初始化的值为null;
    然后将它们传递到Program2中,然后在Program2对它们进行赋值
    可能正常工作凭借感觉,乱说的。
      

  7.   

    To sgr_kk(丝瓜) :
       我试过了,这样也不行不通
      

  8.   

    你在Program2的try中加载驱动,也就是说你的Connection都是Program2 的局部变量,因此呢当try块结束了,数据库连接就不存在了,你引用了不存在数据库连接的InputStream当然有问题,好比你得到一个文件句并,然后将文件删除。不知道说的对否?
      

  9.   

    To study_body(珍惜每一天) :
       对你第一次说的:照你说的试过了,出现同样的错误。
       对你第二次说的:对于函数返回一个对象,这样的做法是行得通的。我认为这里出错的原因在于我返回的是InputStream对象,可能InputStream对象不能这么处理。 
      

  10.   

    我觉得InputStream对象这样处理应该没有问题,不过你的数据库连接是局部的,也就是说你得到了InputStream对象以后仍然要从数据库中读取数据。
      

  11.   

    To study_body(珍惜每一天) :
        按你的意思是:该InputStream对象一直是指向数据库里的该字段,而不是该字段的内容。
        那我怎样将该blob字段从数据库里拷贝出来,不是指向数据库里的该字段?
      

  12.   

    建立一个通道行不行呢?在Program2的try中将所有数据写入通道然后从Program1中读取,首先我没有用过,仅提供参考。
    或者呢将数据缓存起来,建议用第一中。
      

  13.   

    另外大厅说的可能是对的
    将数据成员都变成类的成员而不是在try快中定义的局部变量
    当然他少了一个Connection对象。
      

  14.   

    InputStream 依赖于ResultSet中的record
    ResultSet 依赖于Connection 大厅的做法应该是本帖的正解:因为离开了try 块,Connection的生存周期已经过去,如果在别的语言中,如c++,这种错误应该是一眼就能看出来的。
      

  15.   

    我也觉得该试试 takecare(大厅) 的方法
      

  16.   

    To study_body(珍惜每一天) :
       通道技术我没用过。通过你的提示我以解决改问题,具体来说是将:Connection Statememt ResultSet InputStream 变为Program2的属性。
    在Program2里不能关闭Connection Statement ResultSet 的数据库连接,在servlet Program1中call完Program2.getInputStream()和Program2.showPicture()后再关闭Program2的Connection Statement ResultSet连接。虽然增加了设计的耦合性,但是问题还是被解决了。
       在此谢谢study_body(珍惜每一天) ,takecare(大厅) !加分