Class文件如下:
import java.io.*;
import java.sql.*;
import java.util.Date ;
import oracle.sql.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;
public class UploadAction extends Action
{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
if (form instanceof UploadForm) {
Date date = new Date();
System.out.println("-------------File Upload Begins-------------------") ;
UploadForm theForm = (UploadForm) form;
file://通过struts的FormFile类来获得上传的文件,前台jsp页面对应的代码
file://<html:file property="theFile" />
FormFile file = theForm.getTheFile();
Connection conn = null;
PreparedStatement ps = null ;
String union_Id = "" ;
String union_Version = "" ;
union_Id = theForm.getUnion_Id() ;
union_Version = theForm.getUnion_Version() ;
file://actionpart是数据库表中的字段名,由于表中有多个blob字段,所以用变量来表示其名称
String actionpart = theForm.getActionpart() ;
System.out.println("actionpart is:"+actionpart) ;
file://取得数据库连接,dbPool的源代码附在后面
dbPool dbp = new dbPool();
conn = dbp.getConnection() ;
ResultSet BlobDetails = null;
Statement stmt = null;
try {
InputStream stream = null;
FileInputStream fstream = null;
stream = file.getInputStream();
System.out.println("------------uploadFileSize is : "+stream.available() +"------------") ;
conn.setAutoCommit(false);
stmt = conn.createStatement();
file://先用empty_blob()来初始化该字段
sql = " update regunion set " + actionpart + " = empty_blob() where union_id= " + union_Id +" and union_Version = "+ union_Version;
stmt.executeUpdate(sql) ;
conn.commit() ;
stmt.close() ;
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
sql = "select " +actionpart + " from regunion where union_id= " + union_Id +" and union_Version = "+ union_Version + " for update ";
BlobDetails = stmt.executeQuery(sql);
if (BlobDetails.next()) {
BLOB l_mapBlob = (BLOB)BlobDetails.getBlob(1);
OutputStream l_blobOutputStream = ((BLOB) l_mapBlob).getBinaryOutputStream();
byte[] l_buffer = new byte[10* 1024];
int l_nread = 0;
while ((l_nread=stream.read(l_buffer)) != -1) // Read from file
{
l_blobOutputStream.write(l_buffer,0,l_nread); // Write to Blob
}
stream.close();
l_blobOutputStream.close ();
}
BlobDetails.close();
conn.commit() ;
}
catch (FileNotFoundException fnfe) {
fnfe.printStackTrace() ;
return mapping.findForward("error");
}
catch (IOException ioe) {
ioe.printStackTrace() ;
return mapping.findForward("error");;
}
catch(SQLException ex){
ex.printStackTrace() ;
return mapping.findForward("error");;
}finally{
if(conn != null){
try{
stmt.close();
conn.close() ;
}catch(Exception sqle){
sqle.printStackTrace() ;
}
}
}
request.setAttribute("union_Id",union_Id) ;
request.setAttribute("union_Version",union_Version) ;
System.out.println("-------------File Upload Ends-------------------") ;
return mapping.findForward("success");
}else{
return null;
}
}
}
附:dbPool.java程序
package com.prient.nbsc.unifylaw;
import java.sql.*;
import com.prient.nbsc.common.DBPOOL;
public class dbPool {
public Connection getConnection(){
try {
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String bridge = "jdbc:oracle:thin:@10.6.89.2:1521:sjk";
conn = DriverManager.getConnection(bridge,"user","user") ;
return conn;
}
catch (Exception e) {
System.out.println(e);
return null;
}
}
}