LOB (Large Objects)   分为:CLOBBLOB,即大文本和大二进制数据

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基础 (三) 大文本、二进制数据处理的更多相关文章

  1. 使用JDBC处理MySQL大文本和大数据

    LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. ...

  2. JDBC中级篇(MYSQL)——处理大文本(CLOB)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...

  3. JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  4. JavaWeb(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  5. 利用JDBC处理mysql大数据--大文本和二进制文件等

    转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...

  6. javaweb学习总结(三十四)——使用JDBC处理MySQL大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  7. javaweb(三十四)——使用JDBC处理MySQL大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  8. 三.使用JDBC处理MySql大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  9. 使用jdbc存储图片和大文本

    package cn.itcast.i_batch; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...

随机推荐

  1. 快速解决mysql Lost connection to MySQL server at 'reading initial communication packet及can't connect to mysql server on 'localhost'

    今天在使用Navicat连一个远程mysql时,总是提示连接不成功,提示Lost connection to MySQL server at 'reading initial communicatio ...

  2. BIG biang教你误删oracle 怎么办,

    今天无意中在网上看到了关于oracle误删除数据恢复的一条信息,发现的确很好使,下面就我的测试向大家汇报下. 1. select * from t_viradsl2 t         //查询t_v ...

  3. linux指定账号下配置单独的jdk版本

    1.下载tar.gz格式的安装包,上传到服务器,并解压,本例使用jdk-7u79-linux-i586.tar.gz 2.进入指定账户的目录下, vi  .bashrc,添加环境变量并保存:     ...

  4. IE6/7/8中parseInt第一个参数为非法八进制字符串且第二个参数不传时返回值为0

    JavaScript中数字有十进制.八进制.十六进制.以"0"开头的是八进制,"0x"或"0X"开头的是十六进制. parseInt用来把字 ...

  5. Linux nmap

    一.简介 Nmap(Network Mapper)是一款开放源代码的网络探测和安全审核工具.它用于快速扫描一个网络和一台主机开放的端口,还能使用TCP/IP协议栈特征探测远程主机的操作系统类型.nma ...

  6. MAC、IDFA、IMEI正则表达式

    一.安卓: MAC:接入网络的设备的序号,唯一值.用 16 进制数表示,由 0-9,A-F 组成,如:44:2A:60:71:CC:82 Uuid 正则表达式: ^([0-9a-fA-F]{2})(( ...

  7. EXCEL IF 函数 模糊查询

    A列都是产品名,比如衬衫,长袖衬衫,短袖衬衫,短裙,长裙 搜索A列的产品名,凡是含有“衬衫”的一律在B列对应行输出“衬衫”,凡是含有“裙”字的一律输出“裙子”在B列对应行,请教一下怎么写函数,本来用I ...

  8. volatile 关键字

    就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.如果没有volatile,基本上会导致这样的结果:要么无 ...

  9. Hadoop中WritableComparable 和 comparator

    1.WritableComparable 查看HadoopAPI,如图所示: WritableComparable继承自Writable和java.lang.Comparable接口,是一个Writa ...

  10. Linux与Windows 解压乱码 UTF8BOM读取问题

    Linux 与 Windows 文件乱码问题 这几天需要在linux下用CNN跑数据,但是把数据和数据列表list上传到linux下时却出现了不少乱码的问题.将这两天碰到的编码问题简单的总结一下. 1 ...