解析使用jdbc,hibernate处理clob/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();
相关文章
- mysql5.7的jdbc_JDBC连接mysql5.7简单例子
- hibernate二级缓存注解-mybatis的二级缓存和hibernate的三级缓存
- 极速搭建:JDBC连接MySQL数据库(jdbc连接mysql数据库)
- Hibernate Query接口 setInteger方法:绑定映射类型为int的参数
- Hibernate addJoin方法:将实体和集合相关联
- 使用JDBC连接MySQL数据库(jdbc访问mysql)
- 连接mysql数据库JDBC技术实现连接(mysql数据库jdbc)
- 使用JDBC连接Oracle数据库(jdbc链接oracle)
- MySQL JDBC代码实现快速数据访问(mysql的jdbc代码)
- 利用JDBC连接Linux服务器数据库(jdbc连接linux)
- 使用JDBC连接SQLServer数据库(jdbc链接sqlserver)
- 如何在Java中使用Oracle JDBC连接?(oracle连接jdbc)
- 使用JDBC快速访问Oracle数据库(jdbc访问oracle)
- 使用mysql的JDBC jar包让编程更简单(mysql的jdbc的jar包)
- 使用JDBC直连Oracle快速与可靠的数据持久存储方案(jdbc直连oracle)
- 基于JDBC实现Oracle数据库性能监控(jdbc监控oracle)
- JDBC测试Oracle数据库的简单操作(jdbc测试oracle)
- 数据库使用JDBC查询Oracle数据库的方法(jdbc查询oracle)
- 深入理解Oracle数据库的JDBC连接包(oracle jdbc包)
- 号Oracle JDBC串号连接技术实战(oracle jdbc串)
- Oracle 8搭载新型JDBC驱动开启新篇章(oracle8 jdbc)