JDBC处理CLOB 和 BLOB大对象
在数据库中:
clob用于存储大量的文本数据
可以使用字符流操作
clob用于存储大量的二进制数据
可以使用字节流操作
以mysql为例 先准备一张表:
CREATE TABLE `t_user2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) DEFAULT NULL,
`myInfo` text,
`headImage` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
ClOB 操作:
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
BufferedReader br = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
// 建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?useSSL=false", "root", "123456");
/*存入
* ps = conn.prepareStatement("insert into t_user2 (username, myInfo) values(?, ?)");
ps.setString(1, "张三");
// ps.setClob(2, new FileReader(new File("f:/temp/最强兵王0--10.txt")));
ps.setClob(2, new BufferedReader(
new InputStreamReader(new ByteArrayInputStream("hello world!".getBytes()))));
ps.executeUpdate();*/
// 取出
ps = conn.prepareStatement("select * from t_user2 where id = ?");
ps.setInt(1, 2);
rs = ps.executeQuery();
while(rs.next()) {
Clob clob = rs.getClob("myInfo");
br = new BufferedReader(clob.getCharacterStream());
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
运行代码:
可以看到我把存入的小说又读出来了
blob操作
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
BufferedReader br = null;
ByteArrayInputStream bis = null;
FileOutputStream fos = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
// 建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?useSSL=false", "root", "123456");
//存入
/*ps = conn.prepareStatement("insert into t_user2 (username, headImage) values(?, ?)");
ps.setString(1, "张飞");
ps.setBlob(2, new BufferedInputStream(new FileInputStream("f:/aa/temp/张飞.jpg")));
ps.executeUpdate();*/
// 取出
ps = conn.prepareStatement("select * from t_user2 where id = ?");
ps.setInt(1, 3);
rs = ps.executeQuery();
while(rs.next()) {
Blob blob = rs.getBlob("headImage");
bis = (ByteArrayInputStream) blob.getBinaryStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] flush = new byte[1024];
int len;
while((len = bis.read(flush)) != -1) {
bos.write(flush, 0, len);
}
fos = new FileOutputStream("f:/aa/a.jpg");
fos.write(bos.toByteArray());
fos.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
运行测试:
{{uploading-image-960855.png(uploading...)}}
存入的图片又回来了
JDBC处理CLOB 和 BLOB大对象的更多相关文章
- JDBC(二)之JDBC处理CLOB和BLOB及事务与数据库元数据获取
前面大概介绍了JDBC连接数据库的过程,以及怎么操作数据库,今天给大家分享JDBC怎么处理CLOB和BLOB存储图片的事情,以及JDBC怎么去处理事务.怎么在插入数据的时候生成主键返回值 一.JDBC ...
- JDBC:数据库操作:处理大对象CLOB数据
目标: 了解大对象处理基本原理, 掌握CLOB数据的读,写操作. 可以使用CLOB类处理大文本数据. 大对象处理主要指CLOB和BLOB两种类型字段.可以大量存储文字. 要想在程序中处理这样的大数据操 ...
- JAVA处理Blob大对象
Blob对象是SQL Blob的Java语言映射.SQL Blob是一个内置类型,它可以将一个二进制大对象保存在数据库中.接口ResultSet.CallableStatement和PreparedS ...
- oracle对大对象类型操作:blob,clob,nclob
1.基本介绍 Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等.Oracle 9i realse2支持存储最大为4g的数据,or ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate 大对象类型hibernate制图
基础知识: 在 Java 在, java.lang.String 它可以用来表示长串(超过长度 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中 ...
- hibernate 大对象类型的hibernate映射
在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中还提供了 j ...
- Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型
转自:https://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 概述 LOB 代表大对象数据,包括 BLOB 和 CL ...
- JDBC 复习3 存取Oracle大数据 clob blob
1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...
随机推荐
- Vue2.0 -- 钩子函数/ 过度属性/常用指令/以及Vue-resoure发送请求
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 如何实现浏览器的Console功能
离 JS-Encoder 的最初版本发布已经过了大半年的时间,这段时间除了偶尔修复一下 BUG 外,主要还是忙于学业.最近一段时间不太平,开学时间也大大延迟,加上自己本身对自己的在线编译器不是很满意, ...
- Spring ioc xml 实例化bean 自己实现
public class DefClassPathXmlApplicationContext { private String xmlPath; public DefClassPathXmlAppli ...
- openssl生成rsa公私钥对并在java中使用
rsa著名的非对称加密算法,具体实现我也不是很清楚,大概先要了解一下密码学,有一定基础才能去看的东东,这里就先介绍怎么使用rsa为我们服务. 首先openssl这是个集成了众多加密算法的工具,它将这一 ...
- 学习笔记-EL
仅作为学习过程中笔记作用,若有不正确的地方欢迎指正 目标 理解El的作用,熟练使用EL EL表达式与Jsp表达式对比来记 EL表达式的概念,作用,语法 Jsp作用主要是用来实现动态网页的,而动态网页中 ...
- .Net微服务实践(一):微服务框架选型
微服务框架 微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很 ...
- python——体育竞技
一.体育竞技分析基本规则两个球员,交替用球拍击球发球权,回合未能进行一次击打回合结束首先达到15分赢得比赛 1.自顶向下的设计 #7_game_2.py from random import * de ...
- MATLAB——m_map指南(1)
1.例图 (1) clear all m_proj('oblique mercator');%确定投影方式和绘图界线 m_coast;%画出海岸线 m_grid;%添加格网 第一行代码初始化投影,对于 ...
- Java线程及其实现方式
一.线程&多线程 线程: 线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程 自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序 ...
- 深入解读ES6系列(二)
ES6函数 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,上一节说了es6的历史,变量,以及闭包,这一节我们继续我们知识的海洋,一起奋斗不秃头!不足的欢迎提问留言. 今 ...