JDBC中的大数据是指能存储在数据库中的大的的字节数据,或是大的字符数据。
一下是SQL中提供用来保存大数据类型
类型 | 长度 |
Tinyblob | 28--1B(256B) |
Blob | 216-1B(64K) |
Mediumblob | 224-1B(16M) |
Longblob | 232-1B(4G) |
Tinyclob | 28--1B(256B) |
Clob | 216-1B(64K) |
Mediumclob | 224-1B(16M) |
Longclob | 232-1B(4G) |
但是上面这些类型中,mysql没有提供tinyclob、clob、mediumclob、longclob四种类型,而是使用如下四种类型来处理文本大数据:
类型 | 长度 |
Tinytext | 28--1B(256B) |
Text | 216-1B(64K) |
Mediumtext | 224-1B(16M) |
Longtext | 232-1B(4G) |
下面通过向MySQL插入MP4文件作为实例:
操作之前需要先对MySQL配置文件进行设置一下,Windows中是my.ini文件,Linux中是my.cnf文件,添加:
max_allowed_packet=10485760
这是允许最大文件大小,可以根据自己需要设置。
添加一个工具类 common-io-jar包
首次在数据库中创建bigDate表
create table bigDate(
id int auto_increment,
datename varchar(100),
date MEDIUMBLOB,
PRIMARY key(id)
);
测试类:test.java
public class test {
//@Test
public void fun1() throws Exception {
//获取mysql 服务器的连接
Connection cn= jdbcUtils.getConnection();
String sql="insert into bigDate(datename,`date`) values(?,?)";
PreparedStatement ps=cn.prepareStatement(sql);
//将文件以转换成byte[]对象
byte [] bytes= IOUtils.toByteArray(new FileInputStream("G:/HTML5 简介.mp4"));
//创建一个blob对象,
Blob blob=new SerialBlob(bytes);
ps.setString(1,"HTML5 简介.mp4");
ps.setBlob(2,blob);
//执行
ps.executeUpdate();
}
@Test
public void fun2() throws Exception {
//获取mysql 服务器的连接
Connection cn= jdbcUtils.getConnection();
String sql="select * from bigDate";
PreparedStatement ps=cn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
while(rs.next()){
/**
* 1、获取Blob对象文件
* 2、将blob文件转化成inputstream输入流
* 3、创建输出流,将输出流写入输入流
*/
Blob blob=rs.getBlob("date");
//得到输入流
InputStream in=blob.getBinaryStream();
//创建输出流
OutputStream out=new FileOutputStream("G:/123.mp4");
//将输入流文件,写入到输出流中
IOUtils.copy(in,out);
}
}
}
其中jdbc工具类可以参考JDBC学习(四)时间类型文章中的代码
结果显示