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字段,大家能不能看出是哪有问题啊?
解决方案 »
- 一个表中的两个外键都关联同一个表,mybatis写法
- 提问,有人使用过Jsoup吗,遇到一个选择标签的问题,进来帮看看,谢谢
- 介绍本SOA的好书,最好可以下到中文电子书的!
- java中document转成XML有错
- struts1中的dispatchAction的问题
- 关于resin3和jprofilter的问题,求助哈!!!!!!!
- 关于Struts标签捆饶我一晚的问题
- Java中如何使用串口输出图像的问题
- struts+spring+hibernate项目,打成war后无法在weblogic8.1上发布,但从eclipse上直接部署可以
- myeclipse
- hibernate 3.6 最少需要几个什么包?
- 有人用过pager_taglib框架分页的吗? 进来看一下
你最后为什么还要打开他呢?设置手动不是很好么?