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数据库连接 ...
随机推荐
- 【CF666E】Forensic Examination
题解: 熟练掌握了后缀自动机后大部分题目应该都比较容易想 首先对t建立广义后缀自动机 然后我们可以用线段树合并处理出每个点每个串出现的次数,然后求出最大值 匹配的时候比较巧妙 我们离线处理 对于同一个 ...
- python导入import
1.参考 Python 相对导入与绝对导入 2.Python import 的搜索路径 在当前目录下搜索该模块 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索 在 Python 安装路径 ...
- Centos7防火墙常用命令及mask锁定不能添加端口问题
一.开放端口 sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent sudo firewall-cmd --reload 二. ...
- 解决 Ionic 浏览器跨域问题
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...
- python--实践--模拟浏览器(http)登陆
#方法一:直接使用coookies登陆,此方法需要提前在浏览器中使用账号密码登陆后,获取浏览器中的cookies,在构造的请求中携带这个cookies(缺点是有时效性). #方法二:通过账号密码(Fr ...
- P2661 信息传递 二分图的最小环
题目描述 有 nn 个同学(编号为 11 到 nn )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 ii 的同学的信息传递对象是编号为 T_iTi 的同学. 游戏开 ...
- Python 小程序之 恋爱表情包爬取
虽然恋爱跟我一毛钱关系没有,,但是我还是想爬它 实验爬取网址:http://qq.yh31.com/zjbq/1491124.html # -*- coding: utf-8 -*- # @Time ...
- mac docker环境搭建mysql主从同步服务器
参考地址:https://www.cnblogs.com/jinjiangongzuoshi/p/9299275.html 1.下载镜像 docker pull mysql:5.7.19 2.建立配用 ...
- hdu 3499 flight 【分层图】+【Dijkstra】
<题目链接> 题目大意: 现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的1/2,求从起点到终点的最短距离. 解题分析: 分层图最短路 ...
- JSONP原理实现及url传递参数封装
利用在页面中创建<script>节点的方法向不同域提交HTTP请求的方法称为JSONP,这项技术可以解决跨域提交Ajax请求的问题. JSONP的优点是:它不像XMLHttpReque ...