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字段,大家能不能看出是哪有问题啊?
解决方案 »
- struts2 获取request里存放的对象属性
- 请问myeclipse6.5+JDK1.6应该用什么版本的weblogic
- 我做了一个论坛 别人输入标题的时候带了javascript代码 然后我就点击不进去了
- Struts2 比strut1好用吗
- 求职,java软件工程师,两年工作经验
- struts2使用ajax适合用jqurey吗???
- substr在dao层做,还是在service层做?
- hibernate多表查询
- webservice最多能同时连接多少个客户端,每次传输的数据量有没有上限,安全性如何?
- 关于K线的技术提问
- hibernate 3.6 最少需要几个什么包?
- 有人用过pager_taglib框架分页的吗? 进来看一下
你最后为什么还要打开他呢?设置手动不是很好么?