package readclobDemo.bao;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import jdbcutil.bao.JdbcUtil; /**
原理: 在数据库中对Blob(二进制大对象)字段类型进行图片的存储和读取操作,其中Blob作为一个二进制文件的容器,对大数据对象进行处理;
步奏:1。在oracle数据库中建表 CREATE TABLE "HR"."T_IMAGES"
("IMAGEID" NUMBER(*,0) NOT NULL ENABLE,
"IMAGE" BLOB,
CONSTRAINT "T_IMAGES_PK" PRIMARY KEY ("IMAGEID")
),其中有Blob字段类型,对大对象数据的储存
2.本程序中定义了两个方法,writeBlob()方法主要实现向数据库中储存图片,readerBlob()方法主要实现从数据库中读取存入的图片数据
3.在Main()函数中对两个方法的声明
*/
public class WRBlobDemo { Connection conn=null;
PreparedStatement pasts=null;
ResultSet rs=null; public static void main(String[] args) throws IOException, SQLException {
WRBlobDemo a=new WRBlobDemo();
//a.writeBlob(2);
a.readBlob(2);
} public void writeBlob(int id) throws IOException, SQLException{ String sql1="insert into t_images(imageid,image) values('"+id+"',empty_blob())";
String sql2="select * from t_images where imageid=? for update ";
try {
conn=JdbcUtil.getConnection();
conn.setAutoCommit(false);//设置为手动提交
pasts=conn.prepareStatement(sql1);
pasts.executeUpdate();
System.out.println("图片存储成功!");
pasts=conn.prepareStatement(sql2);
System.out.println("图片存储成功!");
pasts.setInt(1, id);
rs=pasts.executeQuery();
System.out.println("图片存储成功!");
if(rs.next()){ Blob blob=rs.getBlob("image");
OutputStream out=blob.setBinaryStream(1L); //获得输出流,设置起始节点位置
InputStream in=new FileInputStream("F:\\images\\Img.jpg");
byte[] buffer=new byte[1024];
int lenth;
while((lenth=in.read(buffer))>0){ out.write(buffer,0,lenth);
}
System.out.println("图片存储成功!");
in.close();
out.close(); } conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
JdbcUtil.free(rs,pasts, conn);
} } public void readBlob(int id) throws IOException{
String sql="select * from t_images where imageid=? "; try {
conn=JdbcUtil.getConnection();
pasts=conn.prepareStatement(sql);
pasts.setInt(1, id);
rs=pasts.executeQuery(); if(rs.next()){ Blob blob=rs.getBlob("image");
InputStream in=blob.getBinaryStream(); //读取返回的结果集
OutputStream out=new FileOutputStream("F:\\images\\1.jpg");//将图片读取存放在指定位置
byte[] buffer=new byte[1024];
int lenth;
while((lenth=in.read(buffer))>0){ out.write(buffer,0,lenth);
}
System.out.println("图片读取成功!");
in.close();
out.close(); } } catch (SQLException e) { e.printStackTrace();
}finally{
JdbcUtil.free(rs,pasts, conn);
} } }

用二进制大对象类型Blob实现图片入库与出库的操作的更多相关文章

  1. MySQL_产品昨日库存与历史入库历史出库成本_20161124

    产品昨日库存与历史入库历史出库成本 SELECT d.ID,a.*,e.昨日订单额 ,b.昨天入库额,b.历史2天,b.历史3天,b.历史4天,b.历史5天,b.历史6天,b.历史7天,b.历史8天, ...

  2. php解析入库跟出库

    转载:http://www.jb51.net/article/39092.htm 数据放入数据库和取出来显示在页面需要注意什么 入库时 $str=addslashes($str); $sql=\&qu ...

  3. [delphi]向ImageList中加入png类型的资源图片

    向ImageList中动态加入Png图片有些失真,经过多方查询,发现需要将Bitmap的AlphaFormat指定一下. //向ImageList中加入png类型的资源图片 procedure Add ...

  4. 不同格式图片相互转换的开源库分享(使用CxImage,并有VC6的配置过程)

    不同格式图片相互转换的开源库分享 一.背景 笔者在项目的开发中,需要调用windows下的COM接口SetIconLocation来实现桌面快捷方式.而我们项目中给定的图片格式为png格式,SetIc ...

  5. 使用Jasperreporter生成入库出库单打印等报表操作

    项目需要打印报表:就是那种生成入库单,出库单等的操作.使用到的技术:使用iReport Designer5.1.0设计报表,使用struts2+jasperreporter生成最终填充数据的报表 首先 ...

  6. (源代码分析)Android-Universal-Image-Loader (图片异步载入缓存库)的使用配置

    转载请注明出处:http://blog.csdn.net/u011733020 前言: 在Android开发中,对于图片的载入能够说是个老生常谈的问题了,图片载入是一个比較坑的地方.处理不好,会有各种 ...

  7. Jetpack Compose学习(4)——Image(图片)使用及Coil图片异步加载库使用

    原文地址 Jetpack Compose学习(4)--Image(图片)使用及Coil图片异步加载库使用 | Stars-One的杂货小窝 本篇讲解下关于Image的使用及使用Coil开源库异步加载网 ...

  8. 安卓智能POS终端手持机PDA应用仓库出入库,移库,盘点,销售开单系统

    随着移动互联网的兴起,目前仓储管理所面临的的问题可以迎刃而解,WMS仓库系统解决方案通过智能终端扫描条码技术应用解决了工作量大导致工作效率不高,以及数据实时传输等问题,该方案主要提供仓库出入库,移库, ...

  9. 基于jQuery的图片相册滑出放大插件

    今天给大家带来一款基于jQuery的图片相册滑出放大插件.点击相册图片,展示该图片.该插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗..效 ...

随机推荐

  1. 审核流(2)流程设计-SNF.WorkFlow功能使用说明--SNF快速开发平台3.1

    流程设计 图形化的流程设计,更方便.直观 1.打开“流程设计“程序,如上.点击”新建“如下: 2.红色部分为必填项,审批对象是选择要审批的程序菜单,单据名称是在审核流流转时用于提示的单据名称,还要选择 ...

  2. ubuntu14.04使用IceGridAdmin图形界面

    打开网页: http://www.rpmfind.net/linux/RPM/index.html输入搜索: icegrid-gui下载文件: icegrid-gui-3.5.1-2.mga4.x86 ...

  3. 专门为码农定制的14款创意的T裇(T-Shirt)设计

    T裇衫是人们在各种场合都可穿着的服装,如在T裇衫上作适当的装饰,即可增添无穷的韵味.通过图案直接反映人类的精神风貌,你可以把日常生活中的兴趣.习惯.喜怒哀乐.嗜好等展露无疑,张扬个性.秀出自我.对于码 ...

  4. iOS10新特性之CallKit开发详解:锁屏接听和来电识别

    国庆节过完了,回家好好休息一天,今天好好分享一下CallKit开发.最近发现好多吃瓜问CallKit的VoIP开发适配,对iOS10的新特性开发和适配也在上个月完成,接下来就分享一下VoIP应用如何使 ...

  5. jquery.idTabs使用方法

    idTabs是基于Jquery编写封装的一个插件,主要用于实现选项卡功能,它操作简单,只需到官网:http://www.sunsean.com/idTabs/下载插件JS脚本文件,并引用到网站中即可 ...

  6. Linux内核分析课程笔记(一)

    linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...

  7. Microsoft Visual Studio 2012 文档 下载地址 vs2012 中文帮助文档

    https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=34794 下载地址: http://download.microsoft. ...

  8. Winform开发框架之字典管理模块的更新,附上最新2013年全国最新县及县以上行政区划代码sql脚本

    在很多项目里面,字典管理是必备的项目模块,而这个又是比较通用的功能,因此可以单独做成一个通用字典管理,例如这个模块,可以通过集成的方式,使用在我的<Winform开发框架>.<WCF ...

  9. 【iOS】FMDB/SQLCipher数据库加解密,迁移

    2016-04-19更新:本文代码可能有些问题,请移步 http://zhengbomo.github.io/2016-04-18/sqlcipher-start/ 查看 sqlite应用几乎在所有的 ...

  10. How to manage the certificates in the PC

    1.open Run command. 2.enter 'mmc' . 3.Click File, and Add or Remove Snap-in. 4.Select Certificates, ...