10.4(java学习笔记)CLOB,BLOB基本操作
一、CLOB
1.1CLOB简介
CLOB全称是(Character Large Object)字符大对象,用于存储大量的文本数据。
字符大对象的操作不同于一般数据,是通过流来完成的。
1.2MySQL中相关类型
-tinytext:最大255个字节(2^8-1)。
-text:最大65535个字节(2^16-1)。
-mediumtext:最大16777215 个字节(2^24-1)。
-longtext:最大4294967295个字节(2^32-1)。
1.3CLOB对象的写入与读取
void java.sql.PreparedStatement.setClob(int parameterIndex, Reader reader);
设置CLOB在数据库中对应列标位置及输入流,即将reader流所代表的文件(或信息)写入到数据库第parameterIndex列。
Reader java.sql.Clob.getCharacterStream();//获取CLOB对象的字符流
文本内容:

建表语句:
CREATE TABLE `test_clob` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`clob` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; public class TestJDBC{
public static void main(String[] args) throws FileNotFoundException{
final String connectionUrl = "jdbc:mysql://localhost:3306/mybatis";
String userName = "root";
String passWord = "123456";
Connection conn = null;
PreparedStatement ps = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(connectionUrl,userName,passWord);
conn.setAutoCommit(false);
ps = conn.prepareStatement("INSERT INTO `mybatis`.`test_clob`"
+ "(`id`,`name`, `clob`) "
+ "VALUES (?, ?, ?);");
ps.setObject(1, 1);
ps.setObject(2, "1");
//clob通过流的形式进行写入
//也可以通过这种方法将指定字符放入数据库
//ps.setClob(3, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("testClob".getBytes()))));
ps.setClob(3, new FileReader(new File("F:\\TestJava\\testClob.txt")));
ps.execute();
ps = conn.prepareStatement("select * from test_clob where id = ?");
ps.setObject(1, 1);
ResultSet rs = ps.executeQuery();
conn.commit();
while(rs.next()){//获取clob的字符流
Reader re = rs.getClob("clob").getCharacterStream();
int intToChar = -1;//将返回内容依次读取
while((intToChar = re.read()) != -1){
System.out.print((char)intToChar);
}
}
System.out.println("select 成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
testClob.txt
testClob.txt
testClob.txt
testClob.txt
testClob.txtselect 成功

CLOB通过流方法将数据添加到数据库,从数据库中获取CLOB也是通过流的方式读取内容。
二、BLOB
1.1BLOB简介
BLOB全称是( Large Object)字符大对象,用于存储大量的数据(如图片、视频等)。
字符大对象的操作不同于一般数据,是通过流来完成的。
1.2MySQL中相关类型
-tinyblob:最大255个字节(2^8-1)。
-blob:最大65535个字节(2^16-1)。
-mediumtblob:最大16777215 个字节(2^24-1)。
-longblob:最大4294967295个字节(2^32-1)。
2.3BLOB对象的写入与读取
方法和上述CLOB使用方法基本相同。
void java.sql.PreparedStatement.setBlob(int parameterIndex, InputStream inputStream) ;
//设置放入数据库BLOB对象的输入流,及列标。
InputStream java.sql.Blob.getBinaryStream()
//获取数据库BLOB对象的输入流
(表字段及类型)

建表语句:
CREATE TABLE `test_blob` (
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`blob` mediumblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; public class TestJDBC{
public static void main(String[] args) throws FileNotFoundException{
final String connectionUrl = "jdbc:mysql://localhost:3306/mybatis";
String userName = "root";
String passWord = "123456";
Connection conn = null;
PreparedStatement ps = null;
OutputStream os = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(connectionUrl,userName,passWord);
conn.setAutoCommit(false);
ps = conn.prepareStatement("INSERT INTO `mybatis`.`test_blob`"
+ "(`id`,`name`, `blob`) "
+ "VALUES (?, ?, ?);");
ps.setObject(1, 1);
ps.setObject(2, "1");
//将该文件以BLOB对象形式放入数据库中
ps.setBlob(3, new FileInputStream("F:/依风/Pictures/下载图片/bg.jpg"));;
ps.execute();
ps = conn.prepareStatement("select * from test_blob where id = ?");
ps.setObject(1, 1);
//获取查询结果
ResultSet rs = ps.executeQuery();
conn.commit();
byte[] buff = new byte[1024];
int step = -1;
//指定输出流写出位置 F:\Test\Java\test.jpg
os = new FileOutputStream("F:\\TestJava\\test.jpg");
while(rs.next()){
//获取数据库中BLOB对象的输入流
InputStream is = rs.getBlob("blob").getBinaryStream();
//读入BLOB对象内容,并将其写入指定位置
while((step = is.read(buff)) != -1){
os.write(buff, 0, step);
}
is.close();
os.close();
}
System.out.println("成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
select 成功


上述代码先将图片放入数据库中,然后从数据库中获取到对应的BLOB对象,
最后获取BLOB的输入流,并将其写入到指定文件夹,可以看到数据库(以图片方式查看)和指定文件夹中都有图片。
10.4(java学习笔记)CLOB,BLOB基本操作的更多相关文章
- 10.1(java学习笔记)JDBC基本操作(连接,执行SQL语句,获取结果集)
一.JDBC JDBC的全称是java database connection java数据库连接. 在java中需要对数据库进行一系列的操作,这时就需要使用JDBC. sun公司制定了关于数据库操作 ...
- 5.10(java学习笔记)容器的同步控制与只读设置
1.容器的同步控制 像我们平常使用的容器有些是不同步的即线程不安全,例如HashMap等,在多线程时可能出现并发问题. 而有些容器又是同步的,例如Hashtable. 有些时候我们需要将这些不同步的容 ...
- 1.10(java学习笔记)super关键字
supe主要是调用父类中被重写的方法及属性. 用下列代码那说明: package cn.hcf.TestSuper; public class TestSuper { public static vo ...
- 20155234 2610-2017-2第九周《Java学习笔记》学习总结
20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...
- 20145330第九周《Java学习笔记》
20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记04--数组
java学习笔记04--数组 数组复制的方法是使用System类提供的arraycopy()方法,其语法如下: System.arraycopy(Object src, int srcPos, Obj ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
随机推荐
- ionic3自定义图标
http://blog.csdn.net/qq993284758/article/details/78107412
- 解决“并非来自 Chrome 网上应用店。”
Chrome谷歌浏览器已停用不支持的扩展程序解决方法 第一种方法:(亲测有效) 1.首先把需要安装的第三方插件,后缀.crx 改成 .rar,然后解压,得到一个文件夹 2.再打开chrome://ex ...
- lucene、solr、nutch三者的关系
lucene是一个做搜索用的类库. nutch和solr都是基于lucene的,二者都是可直接运行的应用程序: 直接在业务上使用lucene的倒是不太多见. solr主要提供了建立索引(用户可以直接p ...
- 知问前端——自动补全UI
自动补全(autocomplete),是一个可以减少用户输入完整信息的UI工具.一般在输入邮箱.搜索关键字等,然后提取出相应完整字符串供用户选择. 调用autocomplete()方法 var hos ...
- Ueditor 1.4.3 插入表格后无边框无颜色,不能正常显示
在使用Ueditor 插入表格的功能时,发现插入时正常. 但保存到后台后再取出来,表格不能正常显示.查看保存的html代码,发现保存时并未给table 添加border属性.以致于再次取出来时,不能正 ...
- [bzoj2002][Hnoi2010]Bounce弹飞绵羊——分块
Brief description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装 ...
- MYSQL学习心得 优化
这一篇主要介绍MYSQL的优化,优化MYSQL数据库是DBA和开发人员的必备技能 MYSQL优化一方面是找出系统瓶颈,提高MYSQL数据库整体性能:另一方面需要合理的结构设计和参数调整,以提高 用户操 ...
- camera摄像原理之四:曝光和GAMMA【转】
转自:http://blog.csdn.net/ghostyu/article/details/7912880 从最明亮到最黑暗,假设人眼能够看到一定的范围,那么胶片(或CCD 等电子感光器件)所能表 ...
- linux进程的休眠(等待队列)【转】
转自:http://www.cnblogs.com/noaming1900/archive/2011/01/14/1935526.html (转载) bojan 收录于2010-10-09 阅读数: ...
- mysql内连接、左连接、右连接举例说明
如下: CREATE TABLE tb ( id INT PRIMARY KEY, NAME VARCHAR (20) ) ; CREATE TABLE ta ( id INT PRIMARY KEY ...