文件以二进制流存入数据库的问题。我想将文件转成二进制流存入到数据库中,存入数据库中后再从数据库读取,并且要将这些二进制流的字符集存进去。存储的时候是否是这样一个流程:文件--> 文件流 --> byte数组 --> string --> 存入数据库读的流程:  读数据库--> string --> byte数组 --> 文件流 -->文件
有做过这方面的朋友给点思路或贴点代码上来。谢谢

解决方案 »

  1.   

    直接存成blob或者clob就可以了啊,如果是一般文本,不大的话就用string保存,如果大的话用clob,二进制文件可以使用blob
      

  2.   

    谢谢楼上的兄弟,我数据库中存二进组流的字段为blob类型. 
    现在想知道JAVA是怎么一个处理流程,由于文本文件比较多,比较关心字符集问题.
      

  3.   

    conn.setAutoCommit(false);   
      stmt   =   conn.createStatement();   
      /*   
      *   Execute   the   SELECT   statement   
      */   
      rs   =   stmt.executeQuery(query);   
      if(rs.next())   {   
      /*   
      *   Extract   the   BLOB   data   to   a   file   on   the   local   file   system.   
      */   
      blob   =   ((OracleResultSet)rs).getBLOB("FileData");   
      is   =   blob.getBinaryStream();   
      final   String   fileName   =   rs.getString("FileName");   
      final   String   filePath   =   path   +   fileName;   
      os   =   new   FileOutputStream(filePath);   
      final   int   bufferSize   =   blob.getBufferSize();   
      final   byte[]   buffer   =   new   byte[bufferSize];   
      int   bytesRead   =   0;   
      while   ((bytesRead   =   is.read(buffer))   !=   -1)   {   
      os.write(buffer,   0,   bytesRead);   
      }   
      }   
    详细:参考:http://hi.baidu.com/lxcrystal/blog/item/ec18cece2a4f470393457ef3.html
      

  4.   

    字段为blob类型
    用流保存二进制文件(包括文本文件)不用考虑字符集吧
      

  5.   

    时间有限,代码就不写了。给楼主提供些知识点,供楼主参考。数据库在存储数据时,有两种格式,一种是以字节存储的,二进制数据。
    另一种是以字符形式存储的。
    数据库要存储二进制数据,其数据库的列的属性必须是二进制类型的,如MySQL中,类型为BINARY和VARBNARY的列以二进制形式存储数据。
    因为二进制一般都是字节数组,所以,要使用动态的SQL语句,要执行动态的SQL语句,必须使用PerparedStatement,
    它的setBytes方法给未确定部分赋字节数组值。然后调用executeUpdate方法遍完成二进制数据的写入。同样道理,要从数据库中读取二进制数据的时候,
    遍历结果集调用ResultSet的getBytes方法。获得字节数组(也就是二进制数组)。二进制数组一般存储比较大的数据,如图片,影视文件。
    如果数据库列属性是Blob的,获得结果集后调用ResultSet的getBlob方法,获得Blob数据,一个java.sql.Blob对象。Blob类的getBinaryStream方法获得Blob数据的字节输入流。便可以读取Blob数据。累死我了....................呼!