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)過(guò)調(diào)試,發(fā)現(xiàn)在blob.getBinaryStream()時(shí)發(fā)生異常。

          無(wú)奈之下做了一個(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();
          //            }
          //        }
          //

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

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


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


          public interface Blob

          SQL BLOB 值在 JavaTM 編程語(yǔ)言中的表示形式(映射關(guān)系)。SQL BLOB 是內(nèi)置類(lèi)型,它將 Binary Large Object 存儲(chǔ)為數(shù)據(jù)庫(kù)表的某一行中的一個(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)允許編程人員訪問(wèn) SQL BLOB 值。Blob 接口提供某些方法來(lái)獲得 SQL BLOB (Binary Large Object) 值的長(zhǎng)度、在客戶(hù)端實(shí)現(xiàn) BLOB 值以及確定 BLOB 值中某一字節(jié)樣本的位置。此外,此接口還擁有更新 BLOB 值的方法。






          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請(qǐng)注明來(lái)源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2010-02-04 10:30 zhyiwww 閱讀(2555) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): j2eeoracle
          主站蜘蛛池模板: 汝州市| 民勤县| 农安县| 邳州市| 黄大仙区| 沙坪坝区| 定陶县| 巴林右旗| 榕江县| 阳高县| 怀远县| 太白县| 新竹市| 明水县| 饶河县| 宁都县| 慈溪市| 呼玛县| 江都市| 方正县| 南通市| 交城县| 卢湾区| 塔城市| 阿荣旗| 三穗县| 南昌市| 西城区| 若尔盖县| 遂昌县| 清涧县| 芜湖市| 佛坪县| 定远县| 武宣县| 兴隆县| 海安县| 寿宁县| 社旗县| 青川县| 保山市|