zl程序教程

您现在的位置是:首页 >  后端

当前栏目

解析使用jdbc,hibernate处理clob/blob字段的详解

hibernateJDBC 使用 详解 处理 解析 字段 blob
2023-06-13 09:14:54 时间

(1)不同数据库中对应clob,blob的类型:
mysql中:clob对应text blob对应blob
db2/oracle中clob对应clobblob对应blob

(2)domain中对应类型:
clob对应String  blob对应byte[]
clob对庆java.sql.Clobblob对应java.sql.Blob

(3)hibernate配置文件中对应类型:
clob>clob  blob>binay

也可以直接使用数据库提供类型,例如:oracle.sql.Clob,oracle.sql.Blob。

2、jdbc操作clob(以oracle为例)
首先操作clob/blob不像操作varchar类型那样简单,插入步骤一般为两步:第一步插入一个空值,第二步锁住此行,更新clob/blob字段.

复制代码代码如下:

//插入空值
conn.setAutoCommit(false);
Stringsql="insertintofile(name,file_content)values("jack",EMPTY_CLOB());
PreparedStatementpstmt=conn.prepareStatement(sql);
pstmt.executeUpdate();
//锁住此行
Stringsql="selectfile_contentfromfilewherename="jack"forupdate";
PreparedStatementpstmt=conn.prepareStatement(sql);
ResultSetrs=pstmt.executeQuery();
oracle.sql.Clobclob=(oracle.sql.Clob)rs.getClob(1);
java.io.OutputStreamwriter=clob.getAsciiOutputStream();
byte[]temp=newFileContent.getBytes();
writer.write(temp);
writer.flush();
writer.close();
//
pstmt.close();


读取内容:
oracle.sql.Clobclob=rs.getClob("file_content");
if(null!=clob)
{
    Readeris=clob.getCharacterStream();
    BufferedReaderbr=newBufferedReader(is);
    Strings=br.readLine();
   while(s!=null)
   {
       content+=s+"<br>"; 
       s=br.readLine();
   }
}


3、jdbc操作blob
复制代码代码如下:

conn.setAutoCommit(false);
Stringsql="insertintophoto(name,photo)values("jack",empty_blob());
pstmt=conn.prepareStatement(sql);
pstmt=conn.executeUpdate();
//
sql="selectphotofromphotowherename="jack"";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery(sql);
if(rs.next())
    oracle.sql.Blobblob=(oracle.sql.Blob)rs.getBlob(1);
//writetoafile
Filefile=newFile("c:\\test.rar");
FileInputStreamfin=newFileInputStream(file);
OutputStreamout=blob.getBinaryOutputStream();
intcount=-1,total=0;
byte[]data=newByte[blob.getBufferSize()];
while((count=fin.read(data))!=-1)
{
        total+=count;
        out.write(data,0,count);
}

4、hibernateth处理clob
复制代码代码如下:
MyFilefile=newMyfile();
file.setName("jack");
file.setContent(hibernate.createClob(""));
session.save(file);
session.flush();
session.refresh(file,LockMode.UPGRADE);
oracle.sql.Clobclob=(oracle.sql.Clob)file.getContent();
Writerpw=clob.getCharacterOutputStream();
pw.write(longText);//写入长文本
pw.close();
session.close();

5、使用hibernate处理blob:
复制代码代码如下:
原理基本相同:
Photophoto=newPhoto();
photo.setName("jack");
photo.setPhoto(hibernate.createBlob(""))://放一个空值
session.save(photo);
session.flush();
//
session.refresh(photo,LockMode.UPGRADE);//锁住此对象
oracle.sql.Blobblob=photo.getPhoto();//取得此blob的指针
OutputStreamout=blob.getBinaryOutputStream();   
//写入一个文件
Filef=newFile("c:\\test.rar");
FileInputStreamfin=newFileInputStream(f);   
intcount=-1,total=0;
byte[]data=newbyte[(int)fin.available()];
out.write(data);     
fin.close();
out.close();
session.flush();