数据库大文本数据处理

目标:把 mp3文件保存到数据库中!

在my.ini中添加如下配置: max_allowed_packet=10485760

1 什么是大文本数据

所谓大文本数据,就是大的字节数据,或大的字符数据。标准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)

首先我们需要创建一张表,表中要有一个mediumblob(16M)类型的字段。

CREATE TABLE tab_bin(

id INT PRIMARY KEY AUTO_INCREMENT,

filename VARCHAR(100),

data MEDIUMBLOB

);

还有一种方法,就是把要存储的数据包装成Blob类型,然后调用PreparedStatement的setBlob()方法来设置数据

代码如下:

package cn.itcast.demo4;

主要的包

import java.sql.Blob;

import javax.sql.rowset.serial.SerialBlob;

import org.apache.commons.io.IOUtils;

import cn.itcast.demo3.JdbcUtils;

/**

* 大文本数据

*/

public class Demo4 {

// 把mp3保存到数据库中。

@Test

public void fun1() throws Exception {

/*

* 1. 得到Connection

* 2. 给出sql模板,创建pstmt

* 3. 设置sql模板中的参数

* 4. 调用pstmt的executeUpdate()执行

*/

Connection con = JdbcUtils.getConnection();

String sql = "insert into tab_bin values(?,?,?)";

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setInt(1, 1);

pstmt.setString(2, "流光飞舞.mp3");

/**

* 需要得到Blob

* 1. 我们有的是文件,目标是Blob

* 2. 先把文件变成byte[]

* 3. 再使用byte[]创建Blob

*/

// 把文件转换成byte[]

byte[] bytes = IOUtils.toByteArray(new FileInputStream("F:/流光飞舞.mp3"));

// 使用byte[]创建Blob

Blob blob = new SerialBlob(bytes);

// 设置参数

pstmt.setBlob(3, blob);

pstmt.executeUpdate();

}

/**

* 从数据库读取mp3

*/

@Test

public void fun2() throws Exception {

/*

* 1. 创建Connection

*/

Connection con = JdbcUtils.getConnection();

/*

* 2. 给出select语句模板,创建pstmt

*/

String sql = "select * from tab_bin";

PreparedStatement pstmt = con.prepareStatement(sql);

/*

* 3. pstmt执行查询,得到ResultSet

*/

ResultSet rs = pstmt.executeQuery();

/*

* 4. 获取rs中名为data的列数据

*/

if(rs.next()) {

Blob blob = rs.getBlob("data");

/*

* 把Blob变成硬盘上的文件!

*/

/*

* 1. 通过Blob得到输入流对象

* 2. 自己创建输出流对象

* 3. 把输入流的数据写入到输出流中

*/

InputStream in = blob.getBinaryStream();

OutputStream out = new FileOutputStream("c:/lgfw.mp3");

IOUtils.copy(in, out);

}

}

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐