往數據庫裏面寫blob字段數據

思路上是這樣的,首先需要將blob字段數據轉化爲二進制字節流,  
 也就是這樣實現的:
 OutStream blobout = blob.getbinaryOutputStream();
 
 然後得到blob字段的數據:通過選定的i值來得到,
 Object obj = newData.get(rsmd.getColumnName(i));
 
 最後把二進制字節流寫入這個對象當中,具體的實現是這樣的
 blobout.write((File) obj).getBytes());
 
 整個過程這樣就結束了。具體的代碼是這樣的
 if (rs.next()) {
    rsmd = rs.getMetaData();
    BLOB blob = null;
    CLOB clob = null;
    for (int i = 1; i <= rsmd.getColumnCount(); i++) {
     switch (rsmd.getColumnType(i)) {
      case Types.BLOB :
       blob = (BLOB) rs.getBlob(i);
       if (blob != null) {
        blob.trim(0);
        OutputStream blobout =
         blob.getBinaryOutputStream();
        Object obj = newData.get(rsmd.getColumnName(i));
        if (obj instanceof File) {
         blobout.write(((File) obj).getBytes());
        } else if (obj instanceof String) {
         blobout.write(
          (new BASE64Decoder()).decodeBuffer(
           obj.toString()));
        }
        blobout.flush();
        blobout.close();
       }
       break;
      case Types.CLOB :
       clob = (CLOB) rs.getClob(i);
       if (clob != null) {
        //System.out.println("CLOB*****");
        clob.trim(0);
        Writer clobWriter =
         clob.getCharacterOutputStream();
        if (newData
         .get(rsmd.getColumnName(i))
         .toString()
         .equals("")) {
         clobWriter.write(" ");
        } else {
         clobWriter.write(
          newData
           .get(rsmd.getColumnName(i))
           .toString());
        }
        clobWriter.flush();
        clobWriter.close();
       }
       break;
      default :
       break;
     }
    }
    conn.commit();
    return true;
   }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章