JDBC批改Blob字段和文件转移
JDBC修改Blob字段和文件转移
private static void Removetodata2(String path) { Session session = null; Connection conn = null; java.sql.Statement stmt = null; try { session = SessionFactory.openSession(EasySQL.ORACLE, "jdbc:oracle:thin:@127.0.0.1:1521:oradb", "data", "data", false, EasySQL.ORACLE_DRIVER); conn = session.getConnection(); conn = session.getConnection(); boolean defaultCommit = conn.getAutoCommit(); //关闭自动提交 conn.setAutoCommit(false); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); String str = "FileName State"; //日志头 File file = new File(new Date().getTime() + ".txt"); //插入日志 FileInputStream fis = null; File folderfiles = new File(path);//文件夹路径 BufferedOutputStream out = null; BufferedInputStream in = null; File[] files = folderfiles.listFiles(); //获取所有文件 for (int i = 0; i < files.length; i++) {//第一层目录 File sonfiles = files[i]; //获取子文件夹中的子文件 str += "\r\n"; str += "==========================================" + files[i].getName() + ":文件夹:start=================================================="; count = count + 1; System.out.println(count + "-开始:=============" + sonfiles.getName()); if (sonfiles.length() < 2 * 1024 * 1024) { //小于2M的文件上传 /** * 之所以用like 是因为路径问题. file_manage 里面的file_name 里有 * “区划/文件名” 所以like 一下就不用考虑"/"的问题.直接把子文件夹里得的数据拿出来 */ ResultSet rs = stmt .executeQuery("select bzgl.file_manage.file_remark2 as qhdm ,data.taizhang.wh as tzwh,bzgl.file_manage.file_wenhao as wenhao,bzgl.file_manage.file_name as filename,data.taizhang.smwjmc as smwjmc,data.taizhang.smwjlx as smwjlx,data.taizhang.smwj as smwj from bzgl.file_manage right join data.taizhang on bzgl.file_manage.file_wenhao= data.taizhang.wh where bzgl.file_manage.file_name like'%" + sonfiles.getName() + "%' for update");//锁定选择文件 while (rs.next()) { fis = new FileInputStream(sonfiles); accesscount = accesscount + 1; //成功插入个数 String filename = rs.getString("filename"); String wh = rs.getString("tzwh"); //更新该文号下面的台账 扫描文件名称和类型. Query query = session.createQuery("update taizhang set smwjmc='" + filename.substring(0, filename.indexOf(".")) + "',smwjlx='" + filename.substring(filename.indexOf(".") + 1, filename.length()) + "' where wh='" + wh + "'"); query.executeUpdate();//循环记录 记录一次 if(rs.isLast()){ System.out.println(filename + ":更新完毕"); str += "\r\n"; str +="文号:【"+wh+"】 文件名:【"+ filename + "】 [Access] "; } //日志文件记录 oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("smwj"); //批量修改 out = new BufferedOutputStream(blob.getBinaryOutputStream()); in = new BufferedInputStream(fis); int c = 0; byte buffer[] = new byte[1024]; while ((c = in.read(buffer)) != -1) { out.write(buffer); } } //成功的台账文件被存放到另一个地方 fis.close(); File folder= new File(path+File.separator+"台账文件"); if(!folder.exists()){ folder.mkdirs(); } String newname = folder.getPath() +File.separator+sonfiles.getName() ; File successfile = new File(newname); sonfiles.renameTo(successfile); } else { File folder= new File(path+File.separator+"文件过大"); if(!folder.exists()){ folder.mkdirs(); } failcont = failcont + 1; str += "\r\n"; str += sonfiles.getName() + " [Over MaxSize FileSize:" + (sonfiles.length()) / 1048576 + "M]"; } str += "\r\n"; str += "==========================================" + files[i].getName() + ":文件夹end=================================================="; } str += "\r\n"; str += "=========Total:" + count + " Access:" + accesscount + " Failed:" + new Integer(count-accesscount).toString() + "========="; TextFileWriter.write(file, str); } catch (ClassNotFoundException e) { try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); }finally{ try { conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }