【转载】JDBC操作LOB字段
转自:http://www.cnblogs.com/tengtao93/p/4984689.html
1、LOB(Large Objects)大对象,是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达4GB的数据)
--LOB分类两种类型:1)内部LOB; 2)外部LOB:
--内部LOB将数据以字节流的形式存储在数据库的内部。因而,内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作;
--Oracle支持三种类型的内部LOB:1)BLOB(二进制数据);2)CLOB(单字节字符数据);3)NCLOB(多字节字符数据);
--CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、文件等。
--外部LOB:目前只支持一种外部LOB类型,即BFILE类型,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于文件系统中。
--BFILE类型所表示的数据都是只读的,不参与事务。该类型可帮助用户管理大量的由外部程序访问的文件。
2、使用JDBC向数据库插入BLOB类型的数据时必须使用PreparedStatement。
3、向Oracle数据库插入Blob类型数据

public void insertBlobData(){
Connection conn = null;
PreparedStatement ps = null;
String sql = "INSERT INTO customers(id, name, picture) VALUES(?,?,?)";
try{
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, 12345);
ps.setString(2, "Alice"); InputStream in = new FileInputStream("test.jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len;
while((len = in.read(b)) != -1){
baos.write(b, 0, len);
}
ps.setBytes(3, baos.toByteArray()); ps.executeUpdate();
in.close();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(conn, ps, null);
}
}

4、从Oracle数据库中读取Blob类型的数据并通过IO流写入文件中:

public void readBlobData(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT id, name, picture FROM customers WHERE id = ?";
try{
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, 12345);
rs = ps.executeQuery();
if(rs.next()){
Blob blob = rs.getBlob(3);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("out.jpg"));
InputStream in = blob.getBinaryStream();
byte[] b = new byte[1024];
int len;
while((len = in.read(b)) != -1){
bos.write(b,0, len);
bos.flush();
}
bos.close();
in.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(conn, ps, rs);
}
}

【转载】JDBC操作LOB字段的更多相关文章
- jdbc执行预处理,批处理,LOB字段处理,调用存储过程
(1)jdbc执行预处理 PreparedStatment预备语句 eg:String sql="insert into user(id,name,birthday,money) value ...
- oracle 下操作blob字段是否会产生大量redo
操作blob字段是否会产生大量redo,答案是不会.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob ( id n ...
- JDBC之LOB数据类型
JDBC之LOB数据类型 一.Oracle LOB LOB,即Large Objects(大对象),是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据). LOB ...
- Java的JDBC操作
Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间
LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间 把LOB字段的SEGMENT 存放在指定表空间.清理CLOB字段及压缩CLOB空间 1.创建LOB字段存放表空间:create ...
- 【LOB】使用USER_LOBS视图获得当前用户包含LOB字段的表
包含LOB类型字段的表往往需要特殊关照,如何快速的获得包含LOB对象的数据库表?使用DBA_LOBS.ALL_LOBS和USER_LOBS视图可以很方便地获得包含BLOB或CLOB字段的表. 简单看一 ...
- jdbc操作mysql
本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connec ...
随机推荐
- react-native-----hello word!
react-native运行helloword 今天是个特殊的时刻,我前天开始学习react-native,一直环境塔建出错,运行打包出错,今晚,我终于把这个难搞的环境给搭建好了,并成功运行了第一个h ...
- MySql快速入门(四)
在之前我们对MySql已经有了基本的了解,接下来我们就来接触MySql的分库分表,请往下阅读: 分库分表之MyCat实现 分库分表介绍: 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为 ...
- ECMAScript基本语法——⑤运算符 赋值运算符
左边的变量等于等号左边的内容移到右边
- php中的require和include区别
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require 1.require 的使用方法如 require("MyRequireFile.p ...
- Prettier - Code formatter使用
更多VSCode插件使用请访问:VSCode常用插件汇总 Prettier - Code formatter这是一款 格式化js.css代码插件,暂不解释. Prettier是什么? Prettier ...
- Java中基本数据类型byte的溢出问题
Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...
- ubuntu set up 1 - 网络
r2v has to be replaced.. 1. 官网下载zip版本,下载安装脚本 https://www.r2v.com/chapter_00/install.html https://ins ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- c语言 printf格式化输出
#include <iostream> #include<stdio.h> #include <cstring> using namespace std; int ...
- java 学习(day2) 时钟类
看过python的面向对象,所以入手java总的来说还是比较快的. 看视频学习之后写了一个简单的时钟 一个时钟有两部分组成小时和分钟.再大一些还有月,日. 分析一下就是,上述这些属性到达一个值之后,就 ...