大对象Lob字段的处理

Lob 实际上有 2 种类型,分别是用于存储大文本的字段 Clob 和存储二进制大量数据的字段 Blob 。不同的数
据库处理方式略有区别,大字段一般都是采用流的方式进行处理
由于大字段类型存储的数据较多,一般针对 lob 字段会采用分表存储的方式实现
需求:存储学生信息,要求存储学生的照片
将学生照片存储在文件系统中,实际数据中只存储照片的路径
如果图片要求加密,存储在文件系统中则不合理
可以利用 DBMS 提供的压缩加密功能将数据存储在数据表
如果具体存储 ?
一个表中存储相关的基本信息,非大字段数据
一个表中存储大字段数据
Clob
Clob MySQL 种的数据类型
tinytext 最大存放 255 的字符
text 最大存放 65535 个字符
mediumtext 最大存放 16M 的字符
longtext 最大存放 4G 的字符
表的创建
-- 学生的基本信息
create table tb_student(
id bigint primary key auto_increment,
name varchar ( 20 )
);
-- 学生表对应的大字段数据
create table tb_memo(
id bigint -- 具体实现中将其定义为外键,并且支持级联删除
memo longtext
);
-- 为了测试方便,所以将两个表合在一起
create table tb_student(
id bigint primary key auto_increment,
name varchar ( 20 ),
memo longtext
);

使用JDBC向表中插入数据

//JDK1.8 支持 JDBC4.2 ,所以只要驱动支持,加载驱动的操作可以省略
/*
目前可以使用的驱动有 2 种,一个 com.mysql.jdbc.Driver 是针对 MySQL8 以前的老版本的驱动,官方 已经不再建议使用;如果使用MySQL5.7+ 的数据库则建议使用新版本的驱动
com.mysql.cj.jdbc.Driver
*/
try (
Connection conn = DriverManager . getConnection ( "jdbc:mysql:///test?
serverTimezone=UTC" , "root" , "123456" );
Reader r = new BufferedReader ( new FileReader ( "memo.txt" ));) {
PreparedStatement ps = conn . prepareStatement ( "insert into tb_student
values(null,?,?)" );
ps . setString ( 1 , " 张毅 " );
ps . setClob ( 2 , r );
int len = ps . executeUpdate ();
if ( len > 0 )
System . out . println ( " 插入成功 !" );
else
System . out . println ( " 插入失败 !" );
}

 如何判断是否支持不用加载驱动

使用JDBC从表中读取大对象类型字段  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值