博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过JDBC向数据库中存储&读取Blob数据
阅读量:6989 次
发布时间:2019-06-27

本文共 2719 字,大约阅读时间需要 9 分钟。

hot3.png

大对象的存储需要对数据转换成2进制数据,通过流的输入输出操作对Blob数据进行存储和读取操作

步骤:

  存储操作:

  1. 创建一个字节输入流,先将Blob对象读取到字节数组中byte[] b;
  2. 创建一个Blob 实例Blob pic=conn.createBlob();
  3. 创建一个字节输出流接收Blob对象的返回的输出流OutputStream os=pic.setBinaryStream(1);
  4. 将文件写到Blob中 os.write(b);//将b中的字节写到pic中
  5. 给预编译的Prepare的Statement调用setBlob()方法设置Blob类型数据
  6. 执行sql语句
    1,执行getBlob()方法获得数据库中存储的Blob类型的数据//建立输入流,从数据库输入到程序中2,InputStream is=b.getBinaryStream();3,byte[] bs=new byte[is.available()];//创建一个字节数字存储Blob对象的数据is.read(bs);//将Blob读取到数组中4,建立文件输出流,将字节数组中的数据写到硬盘中FileOutputStream fos=new FileOutputStream("G:/"+"aaa.jpg");//将Blob对象写到文件中fos.write(bs);

    具体代码实现:存储操作

    public class WriteBlob { 	public static void main(String[] args) {		Connection conn=JdbcUtil.getConnection();		PreparedStatement ps=null;		try {						ps=conn.prepareStatement("insert into book values(null,?,?)");			ps.setString(1, "葫芦娃");			//1.创建一个字节输入流,指向一个文件			FileInputStream fis=new FileInputStream("G:/abc.jpg");			byte[] b=new byte[fis.available()];			fis.read(b);//将字节读取到字节数组中			//2.创建Blob			Blob pic=conn.createBlob();			OutputStream os=pic.setBinaryStream(1);//返回一个字节输出流			//3.将文件写到Blob中			os.write(b);//将b中的字节写到pic中			os.close();//关闭资源			fis.close();			//4.给ps设置blob			ps.setBlob(2, pic);			//执行			ps.execute();			ps.close();			System.out.println("插入成功");		}catch(Exception e) {			e.printStackTrace();		}finally {			try {				conn.close();			} catch (SQLException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}		}	} }

    读取 

    import java.io.FileOutputStream;import java.io.InputStream;import java.sql.Blob;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; import jdbc1024.JdbcUtil; public class ReadBlob { 	public static void main(String[] args) {				Connection conn=JdbcUtil.getConnection();		PreparedStatement ps=null;		ResultSet rs=null;		try {			ps=conn.prepareStatement("Select * from book where bookid=1");			rs=ps.executeQuery();			while(rs.next()) {				//得到Blob对象				Blob b=rs.getBlob(3);				System.out.println(rs.getInt(1)+"\t"+rs.getString(2));				if(b==null) {					System.out.println("无照片");				}else {					System.out.println("有照片");					//建立输入流,从数据库输入到程序中					InputStream is=b.getBinaryStream();					byte[] bs=new byte[is.available()];					//将Blob读取到数组中					is.read(bs);					//建立文件输出流					FileOutputStream fos=new FileOutputStream("G:/"+"aaa.jpg");					//将Blob对象写到文件中					fos.write(bs);					System.out.println("写入成功");					fos.close();				}			}					}catch(Exception e) {			e.printStackTrace();		}finally {			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}			try {				conn.close();			} catch (SQLException e) {				e.printStackTrace();			}		} 	} }

     

转载于:https://my.oschina.net/zhangmaoyuan/blog/1839033

你可能感兴趣的文章
Pyqt 国际化多语言支持
查看>>
大多数女生为什么不适合当程序员?
查看>>
SID1190471 / 烦人的幻灯片 暴力出奇迹 !!!!!!!!!!!!!!!!!!...
查看>>
高速排序 与 随机高速排序 算法分析
查看>>
使用MyEclipse 2014构建Maven项目的两种方法
查看>>
WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
查看>>
Centos 安装Apache软件
查看>>
微信小程序中在swiper-item中遍历循环添加多个数据内容(微信小程序交流群:604788754)...
查看>>
java-mybaits-00503-延迟加载
查看>>
看淡你的权力
查看>>
Linux学习(一)
查看>>
[1-5] 把时间当做朋友(李笑来)Chapter 5 【小心所谓成功学】 摘录
查看>>
POJ 3126 Prime Path SPFA
查看>>
Shortest Path [3]
查看>>
离线情报分析工具CaseFile
查看>>
【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用
查看>>
05Hadoop-左外连接
查看>>
python3 识别图片文字
查看>>
文字在div中水平和垂直居中的的css样式
查看>>
cocos creator protobuf实践
查看>>