jdbc基础 (三) 大文本、二进制数据处理
LOB (Large Objects) 分为:CLOB和BLOB,即大文本和大二进制数据
CLOB:用于存储大文本
BLOB:用于存储二进制数据,例如图像、声音、二进制文件
在mysql中,只有BLOB,没有CLOB,mysql存储大文本用TEXT
TEXT 分为:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
BLOB 分为:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
取值范围如下图:

下面来看具体的代码实现:
package com.cream.ice.jdbc; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.junit.Test; /**
* 大文本数据操作
*
* 假设数据库中已存在表test:
* create table test(
* id int primary key,
* content longtext
* );
*
* @author ice
*
*/
public class ClobDemo { Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet=null; @Test
public void add(){
try {
connection=JdbcUtils.getConnection();
statement=connection.prepareStatement("insert into test (id,content) values (?,?)");
statement.setInt(1, 1); //大文本要使用流的形式。将d:/test.txt内容添加至该记录的content字段
File file = new File("d:/test.txt");
Reader reader = new FileReader(file);
//不能使用long的参数,因为mysql根本支持不到那么大的数据,所以没有实现
statement.setCharacterStream(2, reader, (int)file.length()); int i = statement.executeUpdate();
if(i>0)
System.out.println("插入成功"); } catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally{
JdbcUtils.releaseResources(null, statement, connection);
}
} @Test
public void read(){
try {
connection = JdbcUtils.getConnection();
statement = connection.prepareStatement("select * from test where id=?");
statement.setInt(1, 1); //将读取内容保存到E盘上
resultSet = statement.executeQuery();
while(resultSet.next()){
Reader reader = resultSet.getCharacterStream("content");
Writer writer = new FileWriter("e:/test.txt");
char buffer[] = new char[1024];
int len = -1;
while((len=reader.read(buffer))!=-1){
writer.write(buffer, 0, len);
}
reader.close();
writer.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.releaseResources(resultSet, statement, connection);
}
}
}
package com.cream.ice.jdbc; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.junit.Test; /**
* 大二进制数据操作
*
* 假设数据库中已存在表test:
* create table test(
* id int primary key,
* content longblob
* );
*
* @author ice
*
*/
public class BlobDemo {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet=null; @Test
public void add(){
try {
connection=JdbcUtils.getConnection();
statement=connection.prepareStatement("insert into test (id,content) values (?,?)");
statement.setInt(1, 1); InputStream in = new FileInputStream("d:/test.jpg");
statement.setBinaryStream(2, in, in.available()); int i = statement.executeUpdate();
if(i>0)
System.out.println("插入成功"); } catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.releaseResources(null, statement, connection);
}
} @Test
public void read(){
try {
connection = JdbcUtils.getConnection();
statement = connection.prepareStatement("select * from test where id=?");
statement.setInt(1, 1); //保存到E盘上
resultSet = statement.executeQuery();
while(resultSet.next()){
InputStream in = resultSet.getBinaryStream("content");
OutputStream out = new FileOutputStream("e:/test.jpg");
byte b[] = new byte[1024];
int len = -1;
while((len=in.read(b))!=-1){
out.write(b, 0, len);
}
out.close();
in.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.releaseResources(resultSet, statement, connection);
}
}
}
这里使用了我上一篇jdbc基础中的JdbcUtils工具类,同时也使用了单元测试来测试两个成员方法,代码已亲测可运行。
csdn博文地址:jdbc基础 (三) 大文本、二进制数据处理
jdbc基础 (三) 大文本、二进制数据处理的更多相关文章
- 使用JDBC处理MySQL大文本和大数据
LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. ...
- JDBC中级篇(MYSQL)——处理大文本(CLOB)
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...
- JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- JavaWeb(三十五)——使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- 利用JDBC处理mysql大数据--大文本和二进制文件等
转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...
- javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- javaweb(三十四)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- 三.使用JDBC处理MySql大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- 使用jdbc存储图片和大文本
package cn.itcast.i_batch; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...
随机推荐
- JSP 标准标签库(JSTL)之最常用的JSTL标签总结
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中下载的二进包(jakarta-t ...
- Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题[转载]
转载自:http://www.cnblogs.com/zhcncn/p/4032321.html 写在前面:解决gedit 在txt文件格式出现乱码的问题,在我自己的操作中是需要把系统设置成中文显示环 ...
- Linux搭建DNS服务器
Linux系统信息: Version: Centos 6.6 Ip address:10.0.0.104 Hostname: extmail.com 配置系统 hostname Vim /etc/sy ...
- java poi read write xlsx
package myjava; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce ...
- 2014 Super Training #1 F Passage 概率DP
原题: HDU 3366 http://acm.hdu.edu.cn/showproblem.php?pid=3366 本来用贪心去做,怎么都WA,后来看网上原来是一个DP题. 首先按P/Q来做排 ...
- Android系列之网络(二)----HTTP请求头与响应头
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Unity3D MainCamera和NGUI UICamera的小插曲
集成NGUI 在实际的项目中,经常会使用NGUI来制作UI,用Main Camera来表现3D,但是NGUI的Camer的投射是正交视图而非透视,它绑定UICamer的脚本而且它的Tag默认是Unta ...
- linux命令学习-复制(cp,scp)
linux为我们提供了两个用于文件的copy的命令,一个是cp,一个是scp.但是它们略有不同: cp主要用于在同一台电脑上,在不同的目录之间来回copy文件,scp主要是在不同的linux系统之间来 ...
- git 添加文件
git 添加文件三步骤 git add filename git commit -m 'remarks' git push origin master
- 部署Zipkin分布式性能追踪日志系统的操作记录
Zipkin是Twitter的一个开源项目,是一个致力于收集Twitter所有服务的监控数据的分布式跟踪系统,它提供了收集数据,和查询数据两大接口服务. 部署Zipkin环境的操作记录:部署Zipki ...