拿oracle说,从request里边读入inputStream,然后先保存其它字段,完了后select blob字段的cursor,然后从inputStream写入

解决方案 »

  1.   

    参阅
    用jsp对oracle的clob字段进行操作 
      作者:未知 更新人:Legume 来源:未知 更新时间:2004.08.24  投稿信箱: tg*ddvip.com   
      CLOB一般用来存放超大广西,如果是2进制文件一般用BLOB. 
    假设col2是CLOB: 
    写操作: String sql = "insert into tb_commendtemp (col1,col2) values('111',?)"; 
    string s = "长文本"; 
    StringBufferInputStream sbin = new StringBufferInputStream(s); 
    PreparedStatement ps = query.getPreStmt(sql); 
    ps.setAsciiStream(1,sbin,s.length()); 
    int i = ps.executeUpdate(); 
    ps.close(); 
    sbin.close(); 
    if(i>0) ok; 
    如果是二进制文件就用FileInputStream写进去 读的时候只要 
    rs.getAsciiStream(); 
    rs.getUnicodeStream(); 
    rs.getBinaryStream(); 
    看它们的名字就知道是得到什么类型的的数据流了. 如果存放的是二进制文件,比如图形,执行文件,压缩文件最好还是blob保险. 
    写和读也要用二进制流, 
    DataInputStrean和DatOutputStream.有时用UNICODE的字符流也能行,但 
    不保险.如果是文本,用Clob和LONG都行.读和写用 
    BuffreedReader和PrintWriter更方便. 
    要想在一个网页上同时显示从程序中推出的文字和图象,这项技术目前在国内 
    可以值100万. 
    因为目前浏览器要想同时显示HTML文档和image文档,你到目前在国内还没有 
    发现,要用到server push技术.你想想一下电子邮件的文档头,是复合型的,把 
    数据用Base 64编码就可以通过特定的文档类型同时显示文字和图片了.可是浏览器目前还做不到. blob:二进制,如果exe,zip 
    clob:单字节码,比如一般的文本文件. 
    nlob:多字节码,如UTF格式的文件. 如果带格式的文件如果WORD,EXECL等如果要保持格式不被破坏,最好以BLOB 
    方式,它近似于以byte的原始方式存放,缺点当然是操作时效率低(慢). 操作CLOB,别的可以看我上面的写和读的例子,只要注意把 
    写pstmt.setBinaryStream()改成rs.setAsciiStream(); 
    读pstmt.getBinaryStream()改成rs.getBinaryStream(); 在从文件读成流的时候用Reader而不要用DataInuputStream 
     
     
      

  2.   

    这个太长,自己看吧
    http://www.uml.org.cn/sjjm/oracle3js.htm
      

  3.   

    jsp上传的一个很好的例子 
    文件上传原理简单实现  
     
     
     
    要实现文件上载,我们必须先了解上载文件的HTTP请求。下面这个简单的应用示范了如何上载文件以及把HTTP请求的原始数据写入文件。用文本编辑器查看该文件即可了解请求的格式,在此基础上我们就可以提取出上载文件的名字、文件内容以及原本混合在一起的其他信息。    
     
    在这里我们写一个简单的html页面up.html,提供一个表单,用户从这里选择文件并把文件上载到服务器。    
     
    <html>    
     
    <head>    
     
    <title>文件上载</title>    
     
    </head>    
     
    <body>    
     
    <form  action="upjsp.jsp"  enctype="MULTIPART/FORM-DATA"  method=post>    
     
    <br  />    
     
    公司:  <input  type="text"  name="company"  />    
     
    <br  />    
     
    选择要上载的文件  <input  type="file"  name="filename"  />    
     
    <br  />    
     
    <input  type="submit"  value="上载"  />    
     
    </form>    
     
    </body>    
     
    </html>    
     
    注意,<form>标记有一个enctype属性,属性值是"MULTIPART/FORM-DATA"。还有个type为file的输入框是用来选择上传文件的。    
     
    表单的action属性值是upjsp.jsp,这是将请求发送给upjsp.jsp文件。upjsp.jsp调用了名为UpBean的JavaBean。    
     
    程序如下:    
     
    <jsp:useBean  id="TheBean"  scope="page"  class="UpBean  "  />    
     
    <%    
     
    TheBean.doUpload(request);    
     
    %>    
     
     
     
      下面是UpBean的实现代码:    
     
    import  java.io.*;    
     
    import  javax.servlet.http.HttpServletRequest;    
     
    import  javax.servlet.http.HttpServletResponse;    
     
    import  javax.servlet.ServletInputStream;    
     
     
     
    public  class  UpBean  {    
     
     
     
    public  void  doUpload(HttpServletRequest  request)  throws    
     
    IOException  {    
     
    PrintWriter  pw  =  new  PrintWriter(    
     
    new  BufferedWriter(new  FileWriter("test.txt")));    
     
    ServletInputStream  in  =  request.getInputStream();    
     
     
     
    int  i  =  in.read();    
     
    while  (i  !=  -1)  {    
     
    pw.print((char)  i);    
     
    i  =  in.read();    
     
    }    
     
    pw.close();    
     
    }    
     
    }    
     
    这个JavaBean把HttpServletRequest对象的表单原始数据写入test.txt文件.    
     
    选择上传一个文本或者网页文件。点击“上载”按钮之后,表单就发送给了upjsp.jsp文件,一起发送的还有上传的文件。upjsp.jsp文件不会向浏览器发送任何应答内容,但它会生成一个test.txt文件。打开test.txt文件,我们可以看到上传文件的内容和一些上传的信息了。    
     
    -----------------------------7d15340138    
     
    Content-Disposition:  form-data;  name="Author"    
     
     
     
    A.  Christie    
     
    -----------------------------7d15340138    
     
    Content-Disposition:  form-data;  name="Company"Abisco    
     
    -----------------------------7d15340138    
     
    Content-Disposition:  form-data;  name="Filename";  filename="C:\123data\abisco.html"    
     
    Content-Type:  text/html    
     
     
     
    /*这里是上传的内容*/    
     
    可以看到,HTTP请求体内包含了所有的表单输入,包括上载的文件。这些输入数据的分隔由一个分隔符实现。分隔符由一系列的“-”字符和一个随机数字构成。在上面的例子中,分隔符为“-----------------------------7d15340138”。最后一个分隔符结束请求体,这个分隔符的后面多出两个“-”符号。    
     
    对于非文件类型的输入数据,分隔符后面跟着下面这行内容:Content-Disposition:  form-data;  name=inputName。其中inputName是表单元素的名字。例如:Content-Disposition:  form-data;  name="Author"。在这行内容的后面,紧跟着两个连续的回车换行符和表单元素值。    
     
    而对于文件型输入域,分隔符的后面有两行内容。第一行内容包含输入元素的名字以及上载文件在客户端的完整路径。注意Windows浏览器会设置文件路径,而Unix/Linux以及Mac浏览器只发送文件名字。