中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
Oracle中三种上载文件技术(三)
作者:佚名 时间:2004-07-10 10:40 出处:互连网 责编:chinaitpower
              摘要:Oracle中三种上载文件技术(三)

  第三种方式:通过JDBC实现文件上载和下载
    通过把文件上载到BLOB或CLOB列实现文件上载,但此法不支持客户端文件上载,所以局限性很大,通过JDBC实现的下载功能也只是在服务器的本地下载(下载程序没有列出),所以这种方法仅作为一项技术参考可以,没有太大实用价值。
  
    Blob_in_stream.jsp程序如下:
  
  <%@ page session="true" language="java" %>
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/HTML;charset=gb2312">
  <title>jdbc upload and download blob</title>
  </head>
  <body>
  <FORM action="blob_w_stream.jsp" method="POST">
  <p>文件 File to upload:<INPUT type="file" name="up_file"><br>
  <p><INPUT type="submit">
  </FORM>
  </body>
  </html>
  
    Blob_w_stream.jsp程序如下:
  
  <%@ page session="true" language="java" contentType="text/html; charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <%@ page import="java.io.*"%>
  <%@ page import="oracle.jdbc.driver.*" %>
  <%@ page import="oracle.sql.*" %>
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/HTML;charset=gb2312">
  <title>jdbc upload and download blob</title>
  </head>
  <body>
  <%
  String uploadfile=request.getParameter("up_file");
  //Input form don't have ENCTYPE="multipart/form-data" clause,else input
  //file name will NULL!Get file name from input form.
  File binaryFile = new File(uploadfile);
  Reader char_stream = clobtext.getCharacterStream();
  char [] char_array = new char [length];
  int chars_read = char_stream.read (char_array, 0, length);
  out.println(char_array);
  out.println();
  out.write();
  Inputstream asciiChar_stream = clobtext.getAsciiStream();
  byte[] asciiChar_array = new byte[length];
  int asciiChar_read = asciiChar_stream.read(asciiChar_array,0,length);
  //Or File binaryFile = new File("c:\\cf\\a.doc"); point to c:\cf\a.doc.
  FileInputStream instream = new FileInputStream(binaryFile);
  %>
  <p>file name is :<%=uploadfile%>
  <%
  Class.forName("oracle.jdbc.OracleDriver").newInstance();
  String connStr="jdbc:oracle:thin:@db92:1521:cf92";
  String user="zy";
  String password="zy";
  Connection conn = DriverManager.getConnection(connStr,user,password);
  conn.setAutoCommit(false);
  Statement stmt=conn.createStatement();
  stmt.execute("UPDATE ZY.BLOB_TABLE SET DATA = EMPTY_BLOB() WHERE FILENAME='Concepts.pdf'");
  conn.commit();
  //must null the blob data column,else if size of inserting file less than
  //existing blob file,then new insert file format error occur!New blob file don't
  //overwrite old blob column data!
  String cmd = "SELECT DATA FROM ZY.BLOB_TABLE WHERE FILENAME='Concepts.pdf' for update";
  ResultSet rset = stmt.executeQuery(cmd);
  BLOB blob;
  rset.next();//must.else occur error "don't call ResultSet.next()"
  blob = ((OracleResultSet)rset).getBLOB(1);
  //must explicit!dont locate in logical block.for example,locate in IF...ITEN.
  OutputStream outstream = blob.getBinaryOutputStream();
  int size = blob.getBufferSize();
  %>
  <p>buffer size is :<%=size%>
  <%
  byte[] buffer = new byte[102400];
  //Or direct 102400 instead of variable size!
  //Performance tips!size=24396.
  int length = -1;
  while ((length = instream.read(buffer)) != -1)
  outstream.write(buffer, 0, length);
  instream.close();
  outstream.close();
  conn.commit();//must explicit commit!If BFILE,then auto commit.
  conn.close();
  %>
  <p>Upload file is down!
  </body>
  </html>
  
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有