mysql blob处理_MYSQL 之 JDBC(十二): 处理Blob

LOB,即Large Objects(大对象),是用来存储大量的二进制和文本数据的一种数据类型

LOB分为两种内省:内部LOB和外部LOB

内部LOB将数据以字节流的形式存储在数据库的内部。因而内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作。

Oracle支持三种类型的内部LOB:

BLOB:二进制数据

CLOB:单字节字符数据

NCLOB:多字节字符数据

CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、音频、文件等。

MySQL四种BLOB类型(除了在存储的最大信息量上不同之外,他们是等同的)

TinyBlob:最大255字节

Blob:最大65K

MediumBlob:最大16M

LongBlob:最大4G

如果存储的文件过大,数据库的性能会下降。

插入Blob数据

packagecom.litian.jdbc;importjava.io.FileInputStream;importjava.io.InputStream;import java.sql.*;/***@author: Li Tian

* @contact: litian_cup@163.com

* @software: IntelliJ IDEA

* @file: InsertBlob.java

* @time: 2020/3/31 14:40

* @desc: |插入Blob类型的数据必须使用PreparedStatement,因为BLOB类型的数据是无法使用字符串拼写的

* 调用setBlob方法插入BLOB*/

public classInsertBlob {public static voidmain(String[] args){

Connection conn= null;

PreparedStatement ps= null;try{

conn=JDBCTools.getConnection();

String sql= "insert into t_user(username, pwd, pic) values(?,?,?)";

ps=conn.prepareStatement(sql);

ps.setString(1, "picture");

ps.setString(2, "123456");

InputStream is= new FileInputStream("C:\\Users\\Administrator\\Desktop\\参考投稿进程.jpg");

ps.setBlob(3, is);

ps.executeUpdate();

}catch(Exception e) {

e.printStackTrace();

}finally{

JDBCTools.release(null, ps, conn);

}

}

}

读取Blob数据

packagecom.litian.jdbc;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.Blob;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;/***@author: Li Tian

* @contact: litian_cup@163.com

* @software: IntelliJ IDEA

* @file: ReadBlob.java

* @time: 2020/3/31 14:47

* @desc: |读取Blob数据

* 1. 使用getBlob方法读取到Blob对象

* 2. 调用Blob的getBinaryStream()方法得到输入流。再使用IO操作即可。*/

public classReadBlob {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;

ResultSet rs= null;try{

conn=JDBCTools.getConnection();

String sql= "select id, username 姓名, pwd, pic from t_user where id=21028";

ps=conn.prepareStatement(sql);

rs=ps.executeQuery();if(rs.next()) {int id = rs.getInt(1);

String name= rs.getString(2);

String pwd= rs.getString(3);

System.out.println(id+ "->" + name + "->" +pwd);

Blob pic= rs.getBlob(4);

InputStream in=pic.getBinaryStream();

OutputStream out= new FileOutputStream("info.jpg");byte[] buffer = new byte[1024];int len = 0;while((len=in.read(buffer)) != -1){

out.write(buffer,0, len);

}

out.close();

in.close();

}

}catch(Exception e) {

e.printStackTrace();

}finally{

JDBCTools.release(rs, ps, conn);

}

}

}

————————————————

版权声明:本文为CSDN博主「李英俊小朋友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_21579045/article/details/105386353

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值