java读取图片插入blob,并取出

本文展示了如何使用Java将图片读取并插入到数据库的Blob字段中,以及如何从数据库取出图片。首先,通过JDBC连接Oracle数据库,创建PreparedStatement插入一个空的Blob值,然后获取Blob对象并读取本地图片文件内容,利用BufferedInputStream和BufferedOutputStream进行文件到Blob的转换。最后,提交事务完成操作。
摘要由CSDN通过智能技术生成
背景:
刚才一个同事问如何把图片插入数据库中,并取出,我想了想,写了个demo。那个同事提出的想法是,把文件的二进制流保存到String中,再转换成Blob插入数据库。对于这个想法,我觉得有些问题,所以并没有采取这个办法去做,但也没有验证过把String再转成流,再插入Blob是否可行,所以也不评价。那么这里,我是直接用输入流去接收,并插入blob中。我将源码和详解带上,与大家分享。

详细内容:
这里要补充一个知识点,就是lob对象,无论是clob还是blob,插入对象前,都需要先插入一个空的clob/blob,也就是empty_clob/empty_blob。原因是因为,要告诉数据库我们已经初始化了一个大字段空间。
java读取图片插入blob,并取出 - 饶为 - 饶为先生的博客
 
这个是oracle原文,大家可以了解下。
思路:
那么说明下思路,插入大字段,其实就是插入一个空的对象,然后通过sql取出来,放入输出流A,再把需要插入lob的内容放入输出流A中,最后提交数据库即可。

那么下面是源码,我写好了注释

public class InsertImage{

//将读取的图片插入数据库中
public static void insertImg() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException, IOException{
//JDBC连接格式
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //ORCL 是sid
String user="soa";
String password="soa";
Connection con = DriverManager.getConnection(
url,user, password);
con.setAutoCommit(false);

//切近!!!无论是blob还是clob,在插入前都需要先插入一个空的blob或则clob内容
PreparedStatement pstmt = con.prepareStatement("insert into BLOB(BLOB_T) values(empty_blob())");
pstmt.executeUpdate();
pstmt.close();
//使数据库处于可编辑状态
String sql1 = "select * from BLOB for update";
ResultSet rs=null;
rs=con.createStatement().executeQuery(sql1);
while(rs.next()){
//取到数据库中blob字段
oracle.sql.BLOB b=(oracle.sql.BLOB )rs.getBlob("BLOB_T");
//文件路径
File f=new File("C:\\Users\\Administrator\\Desktop\\1.png");
//用输入流接收文件内容
BufferedInputStream in=new BufferedInputStream(new FileInputStream(f));
//用输出流得到blob的二进制文件流
BufferedOutputStream out=new BufferedOutputStream(b.getBinaryOutputStream());
int c;
while ((c=in.read())!=-1) {
try {
//将输入流接收到的,写入输出流
out.write(c);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
in.close();
out.close();
}
//关闭,提交
con.commit();
}

这是插入数据库的方法。详细内容查看注解。

public static void readImg() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundExcep

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值