Connection conn = getConn();
PreparedStatement stmt = null;
ResultSet rset = null;
OutputStream writer = null;
BufferedOutputStream bufferWriter = null;
InputStream reader = null;
BufferedInputStream bufferReader = null;
oracle.sql.BLOB blob = null;
String Id = (String) bean.get("ResumeID");
try{
conn.setAutoCommit(false);
String sql1 = "select ResumeID from " + TABLE_FILE + " where ResumeID='" + Id + "' and ACTIVE_STATE=1";
List list = getQueryResultList(sql1);
FormFile file = (FormFile) bean.get("File");
String fileName = Id + ((file.getFileName()).substring((file.getFileName()).lastIndexOf(".")));
String sql2 = "";

//如果不存在数据插入一条空数据
if(list.size()==0){
sql2 = "insert into " + TABLE_FILE + " (resumeid,filename,active_state,uploadfile) values('" + Id + "','" + fileName + "',1,?)";
log.info(sql2);
stmt = getPrepareStatement(sql2);
stmt.setBlob(1,BLOB.empty_lob());
stmt.execute();
}

stmt = conn.prepareStatement("select uploadfile from " + TABLE_FILE + " where ResumeID= ? and ACTIVE_STATE = ? for update");
stmt.setString(1, Id);
stmt.setInt(2, 1);
rset = stmt.executeQuery();
if(rset.next()) {
blob = (oracle.sql.BLOB)rset.getBlob(1);
writer = blob.getBinaryOutputStream();
reader = file.getInputStream();
bufferWriter = new BufferedOutputStream(writer);
bufferReader = new BufferedInputStream(reader);

int  count = -1,
total = 0;
byte[] data = new byte[2048];
while((count = bufferReader.read(data, 0, 2048)) != -1) {  
        total += count;  
        bufferWriter.write(data, 0, count);  
    }  
bufferWriter.flush();

/*byte[] b = new byte[2048]; 
        int len = 0; 
        while ( (len = reader.read(b)) != -1) { 
         writer.write(b,0,len); 
        }
writer.flush(); 
writer.close();
reader.close();*/ 
}

stmt = conn.prepareStatement("update " + TABLE_FILE + " set FILENAME=?,uploadfile=? where ResumeID=? and ACTIVE_STATE = ?");
stmt.setString(1, fileName);
stmt.setBlob(2, blob);
stmt.setString(3,Id);
stmt.setInt(4, 1);
stmt.executeUpdate();
//updateState(Id);

writer.close();
bufferWriter.close();
reader.close();
bufferReader.close();
conn.commit();
}catch(Exception e){
conn.rollback();
throw e;
}finally{
rset.close();
stmt.close();
conn.setAutoCommit(true);
conn.close();
}


//refreshResume(Id);
}
这段代码运行第一次没问题,运行第二次以后有时候会报"无法连续上传此事务"的错,这段代码就是用jdbc上传附件,往oracle表中存一个blob字段,大家能不能看出是哪有问题啊?