JDBC(8)—Blob
- Blob
- LOB,即:Large Objects(大对象),是用来存储大量的二进制和文本数据的一种数据类型(一个lob字段可以存储多达四个G的数据)。LOB分为两种类型:内部LOB和外部LOB
- ——内部LOB将数据以字节流的形式存储在数据库的内部,因而,内部LOB的许多操作都可以参与事物,
*也可以像处理普通数据一样对其进行备份和恢复操作。 - Oracle支持三种类型的内部LOB:
BLOB(二进制数据)
CLOB(单字节字符数据)
NCLOB(多字节字符数据) - ——CLOB和NCLOB适用于存储超长的文本数据,BLOB适用于存储大量的二进制数据,如图像、视频、音频文件等
——目前只支持一种外部LOB类型,在数据库内,该类型仅存储数据,在操作系统中的位置信息,而数据的实体以外部文件的形式存在操作系的文件系统中,因而,该类型所表示的数据是只读的,不参与事物,该类型可以帮助用户管理大量的有外部程序访问的文件。
MySql BLOB类型:
*MySql中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳大小不同的数据。- MySql的四种BLOB类型:
*TinyBlob:255B
*Blob:65K
*MediumBlob:16M
*LongBlob:4G - ——注意:实际生活中根据需要存进的数据大小定义不同的Blob类型,若存储的文件过大,数据库性能会降低。
- 实例:
public class Blob_9 {
/**
* 插入一张图片
* 插入Blob类型的数据必须使用PreparedStatement,因为Blob类型的数据无法用字符串拼写。
*/
@Test
public void testWriteBlob(){
Connection conn = null;
PreparedStatement preparedstatement = null;
try {
conn = TestTools.getConnection();
String sql = "insert into customers(name,age,birth,address,picture)" +
" values(?,?,?,?,?)";
preparedstatement = conn.prepareStatement(sql);
preparedstatement.setString(1, "王仲");
preparedstatement.setInt(2, 24);
preparedstatement.setDate(3, new Date(new java.util.Date().getTime()));
preparedstatement.setString(4, "上海市");
InputStream inputstream = new FileInputStream("Image/1.jpg");
preparedstatement.setBlob(5, inputstream);
preparedstatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(preparedstatement, conn);
}
}
/**
* 从数据库读出一张图片
*/
@Test
public void testReadBlob(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = TestTools.getConnection();
String sql = "select id, name, age, birth, address, picture from " +
"customers where id = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, 20);
rs = ps.executeQuery();
if(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
Date birth = rs.getDate(4);
String address = rs.getString(5);
System.out.println(id+", "+name+", "+age+", " +
""+birth+", "+address);
//接收图片
Blob picture = rs.getBlob(6);
InputStream in = picture.getBinaryStream();
OutputStream out = new FileOutputStream("Image/ongmao.jpg");
byte[] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1){
out.write(b, 0, len);
}
out.close();
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(rs, ps, conn);
}
}
}
JDBC(8)—Blob的更多相关文章
- 跟着刚哥学习Spring框架--JDBC(六)
Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要提供JDBC模板方式.关系数据库对象化方式.SimpleJdbc方式.事务管理来简 ...
- Azure Data Factory(五)Blob Storage 密钥管理问题
一,引言 之前讲解的ADF 集成Azure DevOps 实现CI/CD,在 Releases Pipeline 阶段,我们是将两个 Blob Storage 的链接字符串复制.粘贴到 "O ...
- JDBC(二)之JDBC处理CLOB和BLOB及事务与数据库元数据获取
前面大概介绍了JDBC连接数据库的过程,以及怎么操作数据库,今天给大家分享JDBC怎么处理CLOB和BLOB存储图片的事情,以及JDBC怎么去处理事务.怎么在插入数据的时候生成主键返回值 一.JDBC ...
- JDBC (三)
1 数据库连接池的原理 应用程序直接获取Connection的缺点: 缺点:用户每次请求都需要向数据库获取连接,而数据库创建连接通常需要消耗相对较大的资源,创建的时间较长.如果一个网站一天访问量是10 ...
- 【转】Caffe初试(八)Blob,Layer和Net以及对应配置文件的编写
深度网络(net)是一个组合模型,它由许多相互连接的层(layers)组合而成.Caffe就是组建深度网络的这样一种工具,它按照一定的策略,一层一层的搭建出自己的模型.它将所有的信息数据定义为blob ...
- SoapUI接口测试之JDBC(三)
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口 ...
- 浅谈JDBC(一)
一.JDBC技术引言 1.什么是JDBC技术 提供了一套接口规范,利用java代码进行数据库操作. 2.JDBC技术的核心思想 对于程序员来说,代码访问数据库分为三个步骤:1.通过数据库的账号密码.2 ...
- JDBC(一)之细说JDBC
Properties info = new Properties();//要参考数据库文档 info.setProperty("user", "root"); ...
- JDBC(三)数据库连接池(DBCP、C3P0)
前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...
随机推荐
- 将程序sublime添加到右键菜单中
新建wangzhaobo.bat复制一下代码, 粘贴保存,然后打开. @echo Off :START CLS echo *====================================== ...
- BZOJ3772 精神污染 主席树 dfs序
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3772 题意概括 给出一个树,共n个节点. 有m条互不相同的树上路径. 现在让你随机选择2条路径,问 ...
- LoadRunner录制协议的选择
1.选择协议(提高测试结果的准确性) New Single Protocol Script:单协议脚本,选择一种主协议进行测试 New Multiple Protocol Script:多协议脚本,选 ...
- Noj - 在线强化训练4
状态 题号 竞赛题号 标题 × 1092 A 童年的回忆——计算24 × 1145 B 求图像的周长 × 1144 C 农场灌溉问题 × 1202 D 数独游戏 × 1243 E 循环赛日程表 × 1 ...
- OpenJ_Bailian 4017 爬楼梯
时间限制: 1000 ms 空间限制: 262144 KB 题目描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数.例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一 ...
- json 对象和json字符串
转载至 http://www.cnblogs.com/cstao110/p/3762056.html JSON字符串与JSON对象的区别 Q:什么是"JSON字符串",什么是&q ...
- Java网络编程案例---聊天室
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决 ...
- Socket 网络通信
Socket 网络通信 1.OSI (Open System Interconnect Reference Model)(开放系统互联参考模型) 从下低到高 :物理层.数据链路层.网络层.传输层.会话 ...
- 2D Rotated Rectangle Collision
Introduction While working on a project for school, I found it necessary to perform a collision chec ...
- Django视图层、虚拟环境
一.虚拟环境安装 目的:为了解决版本共存问题 ''' 1.通过pip3安装虚拟环境: -- pip3 install virtualenv 2.前往目标文件夹: -- cd 目标文件夹 (C:\Vir ...