小菜用jsp上传附件到数据库,用longblob数据类型保存上传附件,可是出现内容丢失,上传压缩文件下载回来解压也出错,请问是什么原因?谁能给我发个这方面完整的实例么?要求是把附件放到数据库,;我在这里都10几天了也没人给我发,你们太过分了吧
  收到经我调试通过马上给分,拜托各位大虾了。

解决方案 »

  1.   

    我真是可怜啊,这样都没人帮,要写进数据库是为了夸Linux平台使用,和维护数据安全性了,这年代真是人情冷淡
      

  2.   

    只能顶了---------------------------
    http://www.5ai7.net/
      

  3.   

    给你一段操作文件入oracle数据库的代码:
    //将一个空的 blob 对象存入数据库
                 st1 = cn.createStatement();
                 st1.executeUpdate("INSERT INTO files (filename,content) VALUES("+filename+",empty_blob())");
                 //读数据库,获得 blob 对象句柄,将文件数据写入 blob
                 st = cn.createStatement();
                 rset = st.executeQuery("select content from picture where filename="+filename);
                 if (rset.next()){
                       Blob blob = rset.getBlob(1); //获得 blob 对象句柄
                       OutputStream blobOs = ( (oracle.sql.BLOB)blob).getBinaryOutputStream();
                       FileInputStream inStream = new FileInputStream(src);
                       int length = (int)(new File(src).length());
                       byte[] buf = new byte[length];
                       inStream.read(buf);
                       blobOs.write(buf); // 文件数据写入 blob
                       blobOs.close();
                 }
                 cn.commit();
      

  4.   

    那种代码我写过,可是插入有数据库后数据会出现丢失,只有其中的一部分,我用的是longblob了
      

  5.   

    存硬盘有存硬盘的好处,存数据安全性高,管理方便,还可以夸平台不用修改代码,如果夸linux平台的话存硬盘很多代码都得改写
      

  6.   

    本来也是,这里只是你找帮助和建议的地方,可不能过分依赖她啊。
    一切靠自己,如果不能独挡一面的不是个好的程序员
    给你给最有用的建议:www.google.cn(屡试不爽,哈哈!) 或 http://java.sun.org
    如果还是搞不出来,就跟你的上司说:“我能力有限,这个实在是弄不出来了。”
      

  7.   

    数据库的速度本来就是平时我们做项目的瓶颈,往数据库中存文件的确有它的好处,但将大大降低你程序的效率。如果你实在要存的话,可以试着用一种变通的方法,用smartupload上传文件到服务器,然后把该文件读到数据库中。
    public static int doInsert(Connection conn,String cdoc_name,String cdoc_time,String cdoc_dept ,String address,String cdoc_type)throws Exception{

    if(address==null){
    return -1;
    }
    int ini=GetMaxID.getMaxID(conn,"document");
    String cdoc_no=Integer.valueOf(ini).toString();
    File file=new File(address);
    FileInputStream fis=new FileInputStream(file);
    int itn=0;
    StringBuffer sb=new StringBuffer("insert into document(CDOC_NO,CDOC_NAME,CDOC_TIME,CDOC_DEPT,BDOC_CONTENT,CDOC_TYPE) values('");
    sb.append(cdoc_no+"','");
    sb.append(cdoc_name+"','");
    sb.append(cdoc_time+"','");
    sb.append(cdoc_dept+"',");
    sb.append("?,'");
    sb.append(cdoc_type+"')");
    System.out.println(sb);
    PreparedStatement pstmt=null;
    try{
    pstmt = conn.prepareStatement(sb.toString());
    pstmt.setBinaryStream(1,fis,fis.available());
    itn = pstmt.executeUpdate();
    }catch(Exception e){
    //LogServlet.error(e.getMessage());
    return -1;

    }
    finally{
    if(pstmt!=null)
    pstmt.close();
    }
    file.deleteOnExit();
    return itn;

    }
      

  8.   

    晕死,仅仅 保存到数据库 可以跨平台 ?
    保存到文件同样可以跨平台啊~~楼主:要学会用baidu,google~~
      

  9.   

    分两次操作:
    第一次插入除了longblob以外的其他字段值,
    第二次通过读字节流的方式更新该条记录的longblob字段。
    大家有没有更好的解决方案?可以拿出来讨论一下