呵呵,是不是大对象呀。
写一个java程序:  public boolean insertBlobs(String strTableName, String strArrBlobCols,
                             byte[] blobValues, String[] strArrColumns,
                             String[] strArrColumnValues) throws Exception {
    String strSQL = null;
    Statement ps = null;
    ps = conn.createStatement();
    String strSelPair = " where ";
    boolean blReturn = false;
    if (strTableName == null || strTableName.trim().length() < 1)
      throw new Exception("表名不能为空");
    try {
      if (strArrColumns.length != strArrColumnValues.length) {
        throw new Exception("普通字段和值个数不一致!");
      }      String strColumnsName = strArrBlobCols;
      String strColValuePair = "";
      strColValuePair += "empty_blob()";
      for (int ni = 0; ni < strArrColumns.length; ni++) {
        strColumnsName += "," + strArrColumns[ni];
        strColValuePair += "," + strArrColumnValues[ni];
        if(ni != 0) strSelPair += " and ";
        strSelPair += strArrColumns[ni] + "=" + strArrColumnValues[ni];
      }      strSQL = "insert into " + strTableName
          + " (" + strColumnsName + ")"
          + " values (" + strColValuePair + ")";
      ps.execute(strSQL);
//      ps.execute("commit");
      strSQL = "select " + strArrBlobCols + " from " + strTableName + strSelPair + " for update";
      ResultSet rs = ps.executeQuery(strSQL);
      BLOB blob = null;
      if(rs.next()) {
        blob = ( (oracle.jdbc.OracleResultSet) rs).getBLOB(1);
        java.io.OutputStream out = blob.getBinaryOutputStream();
        out.write(blobValues);
        out.flush();
        out.close();
      }      blReturn = true;
      rs.close();
      ps.close();
    }
    catch (Exception e) {
      if (ps != null) {
        ps.close();
      }
      throw e;
    }
    return blReturn;
  }

解决方案 »

  1.   

    你自己看一下吧!
    转载在oracle中,有4个大对象(lobs)类型可用,分别是blob,clob,bfile,nclob。    
    下面是对lob数据类型的简单介绍。    
    l  blob:二进制lob,为二进制数据,最长可达4GB,存贮在数据库中。    
    l  clob:字符lob,字符数据,最长可以达到4GB,存贮在数据库中。    
    l  bfile:二进制文件;存贮在数据库之外的只读型二进制数据,最大长度由操作系统限制。    
    l  nclob:支持对字节字符集合(nultibyte  characterset)的一个clob列。    
    对于如何检索和操作这些lob数据一直是oracle数据库开发者经常碰到的问题。下面我将在oracle对lob数据处理的一些方法和技巧,介绍给读者,希望能够对读者以后的开发有所帮助。    
    oracle中可以用多种方法来检索或操作lob数据。通常的处理方法是通过dbms_lob包。    
    其他的方法包括使用api(application  programming  interfaces)应用程序接口和oci(oracle  call  interface)oracle调用接口程序。    
    一、在oracle开发环境中我们可以用dbms_lob包来处理!dbms_lob包功能强大,简单应用。既可以用来读取内部的lob对象,也可以用来处理bfile对象。但处理两者之间,还有一点差别。处理内部lob对象(blob,clob)时,可以进行读和写,但处理外部lob对象bfile时,只能进行读操作,写的操作可以用pl/sql处理。另外用sql也可以处理lob,但要注意sql仅可以处理整个lob,不能操作lob的数据片。    
    在dbms_lob包中内建了read(),append,write(),erase(),copy(),getlength(),substr()等函数,可以很方便地操作lob对象。这里不做深入讨论,读者可以参看相关的书籍。    
    对于pl/sql,下面介绍一种技巧,用动态的pl/sql语句处理clob对象来传替表名!    
    example  1.    
    动态PL/SQL,对CLOB字段操作可传递表名table_name,表的唯一标志字段名field_id,clob字段名field_name记录号v_id,开始处理字符的位置v_pos,传入的字符串变量v_clob      
    修改CLOB的PL/SQL过程:updateclob      
    create  or  replace  procedure  updateclob(    
    table_name  in  varchar2,    
    field_id  in  varchar2,      
    field_name  in  varchar2,    
    v_id  in  number,    
    v_pos  in  number,    
    v_clob  in  varchar2)    
    is    
    lobloc  clob;    
    c_clob  varchar2(32767);    
    amt  binary_integer;    
    pos  binary_integer;    
    query_str  varchar2(1000);    
    begin    
    pos:=v_pos*32766+1;    
    amt  :=  length(v_clob);    
    c_clob:=v_clob;    
    query_str  :='select  '  &brvbar;  &brvbar;field_name  &brvbar;  &brvbar;'  from  '  &brvbar;  &brvbar;table_name  &brvbar;  &brvbar;'  where  '  &brvbar;  &brvbar;field_id  &brvbar;  &brvbar;'=  :id  for  update  ';    
    --initialize  buffer  with  data  to  be  inserted  or  updated    
    EXECUTE  IMMEDIATE  query_str  INTO  lobloc  USING  v_id;    
    --from  pos  position,  write  32766  varchar2  into  lobloc    
    dbms_lob.write(lobloc,  amt,  pos,  c_clob);    
    commit;    
    exception    
    when  others  then    
    rollback;    
    end;    
    l  /用法说明:      
    在插入或修改以前,先把其它字段插入或修改,CLOB字段设置为空empty_clob(),      
    然后调用以上的过程插入大于2048到32766个字符。      
    如果需要插入大于32767个字符,编一个循环即可解决问题。      
    查询CLOB的PL/SQL函数:getclob      
    create  or  replace  function  getclob(    
    table_name  in  varchar2,    
    field_id  in  varchar2,      
    field_name  in  varchar2,    
    v_id  in  number,    
    v_pos  in  number)  return  varchar2    
    is    
    lobloc  clob;    
    buffer  varchar2(32767);    
    amount  number  :=  2000;    
    offset  number  :=  1;    
    query_str  varchar2(1000);    
    begin    
    query_str  :='select  '  &brvbar;  &brvbar;field_name  &brvbar;  &brvbar;'  from  '  &brvbar;  &brvbar;table_name  &brvbar;  &brvbar;'  where  '  &brvbar;  &brvbar;field_id  &brvbar;  &brvbar;'=  :id  ';    
    --initialize  buffer  with  data  to  be  found    
    EXECUTE  IMMEDIATE  query_str  INTO  lobloc  USING  v_id;    
    offset:=offset+(v_pos-1)*2000;      
    --read  2000  varchar2  from  the  buffer    
    dbms_lob.read(lobloc,amount,offset,buffer);    
    return  buffer;    
    exception    
    when  no_data_found  then    
    return  buffer;    
    end;    
    l  用法说明:      
    用select  getclob(table_name,field_id,field_name,v_id,v_pos)  as  partstr  from  dual;      
    可以从CLOB字段中取2000个字符到partstr中,      
    编一个循环可以把partstr组合成dbms_lob.getlength(field_name)长度的目标字符串。      
    二、对于在其他不同的开发环境,例如vc,vb,pb,java等环境下对lob的处理,处理方法不尽相同,在这里将简要举几个例子来说明不在oracle开发环境下对lob的处理。    
    (一)  在pb中的处理    
    exampler  2.    
    string  ls_path,ls_filename,ls_jhdh      
    long  ll_num,ll_count,rtn      
    blob  ole_blob      
    ll_num=dw_lb.getrow()      
    if  ll_num>0  then  ls_jhdh=dw_lb.object.ct_njhdh[ll_num]      
    select  count(*)  into  :ll_count  from  sj_jh_jhfjb  where  ct_jhdlxbh='1'  and  ct_jhdh=:ls_jhdh  and  ct_jdlxbh=:is_jdlx;      
    if  ll_count>0  then      
    rtn=messagebox("提示","是否要修改此附件",question!,yesno!,1)      
    if  rtn=1  then      
    SELECTBLOB  ct_jhfjnr  INTO  le_blob  from  sj_jh_jhfjb  where  ct_jhdlxbh='1'  and  ct_jhdh=:ls_jhdh  and  ct_jdlxbh=:is_jdlx;      
    ole_1.objectdata  =ole_blob      
    If  ole_1.activate(offsite!)  <>  0  Then      
    Messagebox("OLE  Activate","不能激活")      
    Return  -1      
    end  If      
    end  if      
    else      
    messagebox("提示","没有附件")      
    end  if      
    end  if    
    (二)在vb中的处理    
    在vb中处理大对象,一般可以用OO4O(oracle  objects  for  ole)来处理大对象。这里介绍一种不用0040处理大对象blob的方法。    
    下面这段程序可以将一个文件(文本文件,doc文件,图象文件等)保存到数据库中,并可以将其从数据库读出      
    需要两个commandbutton      
    cmd1  名称  cmdsave  caption  保存      
    cmd2  名称  cmdread  caption  读取      
    一个cmddialog控件      
    同时需要创建一张表t_demo(字段id  类型  number,;字段text  类型  blob;)    
    exmple  3.    
    Option  Explicit    
    Dim  rn  As  ADODB.Connection    
    Public  Function  CreateDataSource(DataSource  As  String,  
      

  2.   

    java我不会用,能不能发一个vb的程序