2005-01-24 oracle中blob字段下载后的乱码问题

来源:互联网 发布:路由器怎么连接网络 编辑:程序博客网 时间:2024/05/22 07:54

oracle大容量数据类型

BLOBCLOB、和 NCLOB:它们在数据库中要么存储在表中,要么存储在单独的段或表空间中。

       BLOB 能够存储大容量的二进制数据,典型例子有图形图像和照片。

       CLOB 能够存储大容量的字符数据,而且对于存储非结构化的 XML 文档很有用。

       NCLOB:由对应于为 Oracle 数据库定义的本地字符集的字符数据组成。

BFILE:它们作为操作系统文件存储。

       BFILE 是一种 LOB 类型,它的值由二进制(“原始”)数据组成,而且存储在数据库表空间之外的服务器端操作系统文件中。

 

oracleblob字段下载后的乱码问题

 解决oracleblob字段下载后的乱码问题注意不能按照像其他数据库那样的取法而注意使用getBlob()这个oracle特有的方法。

错误(在其他数据库中行的通)

 

private static final String QUERY_ATTACHID = "SELECT TEC_ATTACHID,TEC_ATTACHCONTENT,TEC_ATTACHPOSTFIX "
            
+ "FROM TFZN_018_KTFJXX WHERE TEC_ATTACHID=?";

stmt 
= connection.prepareStatement(QUERY_ATTACHID);
stmt.setLong(
1, attachId.longValue());
queryResult 
= stmt.executeQuery();
Tfzn018KtfjxxPO tfzn018KtfjxxPO 
= new Tfzn018KtfjxxPO();
if (queryResult.next()) {
                     tfzn018KtfjxxPO.setTec_attachcontent(queryResult.getBytes(
"TEC_ATTACHCONTENT"));
    tfzn018KtfjxxPO.setTec_attachid(queryResult.getLong(
"TEC_ATTACHID"));
    tfzn018KtfjxxPO.setTec_attachpostfix(queryResult.getString(
"TEC_ATTACHPOSTFIX"));
}

 

 

 

改正后oracle中使用

ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (queryResult.next()) {
    tfzn018KtfjxxPO.setTec_attachid(queryResult.getLong(
"TEC_ATTACHID"));
    tfzn018KtfjxxPO.setTec_attachpostfix(queryResult.getString(
"TEC_ATTACHPOSTFIX"));
    java.sql.Blob blob 
= queryResult.getBlob("TEC_ATTACHCONTENT");
    InputStream is 
= blob.getBinaryStream();
    
int bytesRead = 0;
    
byte[] buffer = new byte[8192];
    
// 从输入流读到字节数组
    while ((bytesRead = is.read(buffer, 08192)) != -1{
        
// 从字节数组到输出流
        baos.write(buffer, 0, bytesRead);
    }

    
byte[] bufferFile = baos.toByteArray();
    tfzn018KtfjxxPO.setTec_attachcontent(bufferFile);
    connection.commit();
}