甜咖啡

          我的IT空間

          向oracle數據庫存儲文件,并讀出文件

          /**
            * 從數據庫中查詢IRI和KLO模型的數據,并下載到本地
            * @param dataTime         時次
            * @param outIRIFilePath   IRI文件下載到本地的路徑
            * @param outKLOFilePath   KLO文件下載到本地的路徑
            * @param outAnaFilePath   插值文件下載到本地的路徑
            */
            @SuppressWarnings("static-access")
            public static void selectBlogInfo(String dataTime, String outIRIFilePath, String outKLOFilePath, String outAnaFilePath) {
            try {
            Connection con = DBConnectionManager.getInstance().getConnection();
            Statement st = con.createStatement();
            String sql = "select * from MODELTEC where DATATIME=to_date('"+dataTime+"', 'YYYY-mm-dd HH24')";
            ResultSet rs = st.executeQuery(sql);
            if (rs.next()) {
            Blob blod = rs.getBlob("IRIDATA");
            InputStream reader = blod.getBinaryStream();
            dataTime = dataTime.replaceAll("-", "");
            dataTime = dataTime.replaceAll(" ", "");
            String iriFilePath = outIRIFilePath+"\\"+dataTime+"0000.iri.grd";
            File file = new File(iriFilePath);
            OutputStream writer;
            writer = new BufferedOutputStream(new FileOutputStream(file));
            byte buf[] = new byte[1024];
            for (int i = 0; (i = reader.read(buf)) > 0;) {
            writer.write(buf, 0, i);
            }
            writer.close();
            reader.close();
           
            blod = rs.getBlob("IRIDATA");
            reader = blod.getBinaryStream();
            String kloFilePath = outKLOFilePath+"\\"+dataTime+"0000.klo.grd";
            file = new File(kloFilePath);
            writer = new BufferedOutputStream(new FileOutputStream(file));
            buf = new byte[1024];
            for (int i = 0; (i = reader.read(buf)) > 0;) {
            writer.write(buf, 0, i);
            }
            writer.close();
            reader.close();
           
            blod = rs.getBlob("ANADATA");
            reader = blod.getBinaryStream();
            String anaFilePath = outAnaFilePath+"\\"+dataTime+"0000.grd";
            file = new File(anaFilePath);
            writer = new BufferedOutputStream(new FileOutputStream(file));
            buf = new byte[1024];
            for (int i = 0; (i = reader.read(buf)) > 0;) {
            writer.write(buf, 0, i);
            }
            writer.close();
            reader.close();
            }
            DBConnectionManager.closeConnection();
            if(con!=null){con.close();}
            if(st!=null){st.close();}
            if(rs!=null){rs.close();}
            } catch (SQLException e) {
            e.printStackTrace();
            } catch (FileNotFoundException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            }
            }
           
            /**
            * 把IRI和KLO模型的文件上傳到數據庫中
            * @param dataTime     時次
            * @param iriFilePath  要上傳IRI文件的絕對路徑
            * @param kloFilePath  要上傳KLO文件的據對路徑
            * @param ANAFilePath  要上傳插值文件的據對路徑
            */
            @SuppressWarnings("static-access")
            public static void insertBlogInfo(String dataTime, String IRIFilePath, String KLOFilePath, String ANAFilePath) {
            try {
            Connection con = DBConnectionManager.getInstance().getConnection();
            // 處理事務
            boolean defaultCommit;
            defaultCommit = con.getAutoCommit();
           
            con.setAutoCommit(false);
            Statement st = con.createStatement();
           
            String sql = "select * from MODELTEC where DATATIME=to_date('"+dataTime+"', 'YYYY-mm-dd HH24')";
            ResultSet rs = st.executeQuery(sql);
            if(rs.next()){
            System.out.println(dataTime+"時次已經入庫!");
            return ;
            }
            // 插入一個空對象
            sql = "insert into MODELTEC(ID, DATATIME, IRIDATA, KLODATA, ANADATA) values(" +
            "SEQU_MODEL_ID.nextval, " +
            "to_date('"+dataTime+"','YYYY-mm-dd HH24'), " +
            "empty_blob(), " +
            "empty_blob(), " +
            "empty_blob())";
            st.executeUpdate(sql);
            // 用for update方式鎖定數據行
            sql = "select IRIDATA,KLODATA,ANADATA from  MODELTEC where DATATIME=to_date('"+dataTime+"', 'YYYY-mm-dd HH24') for update";
            rs = st.executeQuery(sql);
            if (rs.next()) {
            // 得到java.sql.Blob對象,然后Cast為oracle.sql.BLOB
            BLOB blob = (BLOB) rs.getBlob("IRIDATA");
            // 到數據庫的輸出流
            OutputStream outStream = blob.getBinaryOutputStream();
            // 這里用一個文件模擬輸入流
            InputStream fin = new FileInputStream(new File(IRIFilePath));
            // 將輸入流寫到輸出流
            byte[] b = new byte[blob.getBufferSize()];
            int len = 0;
            while ((len = fin.read(b)) != -1) {
            outStream.write(b, 0, len);
            }
            // 依次關閉(注意順序)
            fin.close();
            outStream.flush();
            outStream.close();
           
            // 得到java.sql.Blob對象,然后Cast為oracle.sql.BLOB
            blob = (BLOB) rs.getBlob("KLODATA");
            // 到數據庫的輸出流
            outStream = blob.getBinaryOutputStream();
            // 這里用一個文件模擬輸入流
            fin = new FileInputStream(new File(IRIFilePath));
            // 將輸入流寫到輸出流
            b = new byte[blob.getBufferSize()];
            len = 0;
            while ((len = fin.read(b)) != -1) {
            outStream.write(b, 0, len);
            }
            // 依次關閉(注意順序)
            fin.close();
            outStream.flush();
            outStream.close();
           
            // 得到java.sql.Blob對象,然后Cast為oracle.sql.BLOB
            blob = (BLOB) rs.getBlob("ANADATA");
            // 到數據庫的輸出流
            outStream = blob.getBinaryOutputStream();
            // 這里用一個文件模擬輸入流
            fin = new FileInputStream(new File(ANAFilePath));
            // 將輸入流寫到輸出流
            b = new byte[blob.getBufferSize()];
            len = 0;
            while ((len = fin.read(b)) != -1) {
            outStream.write(b, 0, len);
            }
            // 依次關閉(注意順序)
            fin.close();
            outStream.flush();
            outStream.close();
           
            con.commit();
            /* 恢復原提交狀態 */
            con.setAutoCommit(defaultCommit);
            DBConnectionManager.closeConnection();
            if(con!=null){con.close();}
            if(st!=null){st.close();}
            if(rs!=null){rs.close();}
            }
            } catch (SQLException e) {
            e.printStackTrace();
            } catch (FileNotFoundException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            } catch (Exception e) {
            e.printStackTrace();
            }
            }

          posted on 2012-10-19 13:17 甜咖啡 閱讀(1337) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2012年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          統計

          常用鏈接

          留言簿(1)

          我參與的團隊

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 封开县| 绍兴县| 八宿县| 邹城市| 汪清县| 焦作市| 和林格尔县| 榆社县| 响水县| 南康市| 长沙县| 四川省| 十堰市| 昭平县| 库尔勒市| 修水县| 鄂托克旗| 芜湖市| 任丘市| 白河县| 江川县| 东平县| 石家庄市| 中西区| 桂平市| 新余市| 贵州省| 浠水县| 南宫市| 长顺县| 安平县| 江永县| 称多县| 庄河市| 罗田县| 景洪市| 石渠县| 应用必备| 建阳市| 会昌县| 泸溪县|