当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

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>
相关内容
赞助商链接