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();
            }
        }
    }