zhyiwww
          用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
          posts - 536,comments - 394,trackbacks - 0


          我在處理結(jié)果集的時(shí)候,做了一個(gè)處理,把記錄都處理成了Map的對(duì)象,而把結(jié)果集處理成了一個(gè)List對(duì)象。
          如下:
          public List<Map<String, Object>> toList() throws SQLException {

                      List<Map<String,Object>> recordsList = new ArrayList<Map<String, Object>>();
                 
                      ResultSetMetaData meta = rst.getMetaData();
                      int colCnt = meta.getColumnCount();
                     
                      while(rst.next()){
                         
                          Map<String,Object> record = new HashMap<String, Object>();
                         
                          for(int i=0;i<colCnt;i++){
                              String colName = meta.getColumnName(i+1);
                              Object colValue = rst.getObject(colName);
                              log.debug(colValue);
                              if(colValue instanceof Blob){
                                  log.debug("blob type");
                              }else{
                                  record.put(colName, colValue);
                              }
                             
                          }
                         
                          recordsList.add(record);
                      }      
                        
                      return recordsList;
                  }

          之后,就關(guān)閉了resultset ,statement ,connection。然而在我從map對(duì)象里面取得blob對(duì)象時(shí),總是報(bào)SQLException異常。經(jīng)過調(diào)試,發(fā)現(xiàn)在blob.getBinaryStream()時(shí)發(fā)生異常。

          無奈之下做了一個(gè)試驗(yàn)。

          PreparedStatement stmt = null;
          //        ResultSet rst = null;
          //
          //        try {
          //            stmt = this.con
          //                    .prepareStatement("SELECT * FROM CCX_INFO_ARTICAL WHERE ARTICAL_ID=?");
          //            stmt.setLong(1, articalId);
          //
          //            rst = stmt.executeQuery();
          //            if(rst.next()){
          //                Blob b = rst.getBlob("ARTICAL_CONTENT");
          //                log.debug(b);
          ////                InputStream in = b.getBinaryStream();
          //               
          //               
          //               
          //               
          //                log.debug(in);
          //               
          //            }
          //
          //        } catch (SQLException e) {
          //            throw e;
          //        } finally {
          //            rst.close();
          //            if (stmt != null) {
          //                stmt.close();
          //            }
          //            if (this.con != null && this.con.getAutoCommit()) {
          //                this.con.close();
          //            }
          //        }
          //

          此段代碼可以順利的無異常的執(zhí)行。由此我推測(cè)認(rèn)為,主要是因?yàn)?resultset ,connection關(guān)閉引起的。這說明,在執(zhí)行了查詢操作之后,
          我們雖然可以得到一個(gè)blob對(duì)象,但是實(shí)際的內(nèi)容并沒有讀如內(nèi)存,也就是說,并沒有讀如到blob對(duì)象中,而此blob對(duì)象也就相當(dāng)于一個(gè)對(duì)數(shù)據(jù)庫中blob字段操作的一個(gè)引用,所以,此時(shí),如果想從blob字段中讀取數(shù)據(jù),還是需要數(shù)據(jù)庫連接的。

          而上面的封裝操作之后,數(shù)據(jù)庫連接已經(jīng)中斷,所以,再讀取數(shù)據(jù)時(shí),就發(fā)生了異常。


          下面是Blob接口的說明,也許能給我們更好的解釋.


          public interface Blob

          SQL BLOB 值在 JavaTM 編程語言中的表示形式(映射關(guān)系)。SQL BLOB 是內(nèi)置類型,它將 Binary Large Object 存儲(chǔ)為數(shù)據(jù)庫表的某一行中的一個(gè)列值。默認(rèn)情況下,驅(qū)動(dòng)程序使用 SQL locator(BLOB) 實(shí)現(xiàn) Blob,這意味著 Blob 對(duì)象包含一個(gè)指向 SQL BLOB 數(shù)據(jù)而不是數(shù)據(jù)本身的邏輯指針。Blob 對(duì)象在它被創(chuàng)建的事務(wù)處理期間有效。

          接口 ResultSetCallableStatementPreparedStatement 中的方法(如 getBlobsetBlob)允許編程人員訪問 SQL BLOB 值。Blob 接口提供某些方法來獲得 SQL BLOB (Binary Large Object) 值的長(zhǎng)度、在客戶端實(shí)現(xiàn) BLOB 值以及確定 BLOB 值中某一字節(jié)樣本的位置。此外,此接口還擁有更新 BLOB 值的方法。






          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請(qǐng)注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2010-02-04 10:30 zhyiwww 閱讀(2548) 評(píng)論(0)  編輯  收藏 所屬分類: j2eeoracle
          主站蜘蛛池模板: 巨鹿县| 黄骅市| 喀什市| 台东市| 鱼台县| 林口县| 金华市| 西林县| 宣汉县| 玉龙| 驻马店市| 横峰县| 昌图县| 策勒县| 忻城县| 七台河市| 东港市| 石河子市| 梧州市| 双城市| 重庆市| 宜兴市| 汕尾市| 九龙城区| 常山县| 蕉岭县| 靖边县| 慈溪市| 鹤岗市| 陈巴尔虎旗| 鹰潭市| 恩施市| 天柱县| 肃宁县| 阿合奇县| 名山县| 东莞市| 樟树市| 西乌珠穆沁旗| 新乡县| 永康市|