BLOB 操作
对于数据库是BLOB类型存储数据。
BLOB数据插入:
Oracle提供的标准方式: 先插入一个空BLOB对象,然后Update这个空对象。
首先使用empty_blob()函数插入一个空BLOB对象。
然后重新查询BLOB,使用for update锁字段,注意关闭连接和回滚或提交。
ResultSet 获取 BLOB对象。
BLOB.setByte(byte); //这个无效,数据存不进去,不能用
或者 OutputStream os = blob.setBinaryStream(0); // 0设置起始位置
blob.getOutputStream(); //已经deprecated
ResultSet 和 Statement 会在连接关闭时自动关闭,因此无需自己关闭。
/**
* 保存附件Blob
* @param attachId
* @throws SQLException
*/
private void setAttachBlob(long attachId, String fileData) throws SQLException {
logger.debug(">>>setAttachBlob(long attachId)");
StringBuilder sql = new StringBuilder();
sql.append(" select file_data fileData from test_attach where attach_id=" + attachId + " for update");
Connection connection = null;
try {
byte[] byteStream = Base64.decodeBase64(fileData.getBytes("UTF-8"));
connection = super.getDbHelper().getConnection();
connection.setAutoCommit(false);
ResultSet rs = connection.prepareStatement(sql.toString())
.executeQuery();
if (rs.next()) {
BLOB blob = (BLOB) rs.getBlob("fileBody");
OutputStream os = blob.setBinaryStream(0);
ByteArrayInputStream is = new ByteArrayInputStream(byteStream);
byte[] byteData = new byte[512];
int len = 0;
try {
while((len = is.read(byteData, 0 , 512)) != -1) {
os.write(byteData, 0, len);
}
os.flush();
} catch (IOException e) {
logger.error("file read write error.", e);
} finally {
if(is != null) {
is.close();
}
if(os != null) {
os.close();
}
}
}
connection.commit();
} catch (UnsupportedEncodingException e) {
logger.error("decode error file get byte...", e);
e.printStackTrace();
} catch (DbException e) {
connection.rollback();
logger.error("blob save error...", e);
}finally {
// 关闭连接
if(connection != null && !connection.isClosed()) {
connection.close();
}
}
logger.debug("<<<setAttachBlob(long attachId)");
}
获取BLOB比较简单:
ResultSet rs = st.executeQuery( "select file_data from test_attach where attach_id=103 ");
if (rs.next()) {
java.sql.Blob blob = rs.getBlob("file_data ");
InputStream ins = blob.getBinaryStream();
BLOB 操作的更多相关文章
- 支持BLOB操作的Jena框架扩展——JenaBLOB
与研究语义网的同行们分享一下上半年做的一个东西,它是支持BLOB操作的Jena框架扩展--JenaBLOB,已在GitHub上开源,欢迎提出宝贵意见! 众所周知,Jena是不支持BLOB类型的Lite ...
- python blob操作
最近在学习使用Python,操作Oracle数据库采用的是cx_Oracle模块. 对于基本字段,都可以正常操作.但是对于Blob字段,我试试好几次,都没成功.下面贴出测试代码,与大家讨论讨论. 这是 ...
- js 点击默认另存 ,不是打开 Blob 操作
function savepic(obj) { if (memFileObj != undefined) { obj = memFileObj; } else { memFileObj = obj; ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- 怎么对MySQL数据库操作大数据?这里有思路
最近学到一招关于使用java代码操作MySQL数据库,对大文本数据(LOB)进行CRUD的技巧,虽然向数据库很少向中存入大文本文件(一般都是存储在硬盘上),但是还是很有必要知道这一技巧的.下面我就来说 ...
- Azure系列2.1 —— com.microsoft.azure.storage.blob
网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习心得做下笔记,文中不正确地方请大家指正. Azure Blob ...
- java读取blob全身乱码
一.BLOB操作 .入库 ()JDBC方式 //通过JDBC获得数据库连接 Class.forName("oracle.jdbc.driver.OracleDriver"); Co ...
- JDBC处理CLOB 和 BLOB大对象
在数据库中: clob用于存储大量的文本数据 可以使用字符流操作 clob用于存储大量的二进制数据 可以使用字节流操作 以mysql为例 先准备一张表: CREATE TABLE `t_user2` ...
- Azure Blob (三)参数设置说明
一,引言 上一篇将 Azure Blob 存储的时候,有使用到一个 .NET Core Web 项目,通过代码的方式进行操作 Azure Blob 的数据,接着上一篇的内容,今天继续看一下代码,具体 ...
随机推荐
- 时间操作(JavaScript版)—页面显示格式:年月日 上午下午 时分秒 星期
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/35222531 <!DOCTYPE ...
- TensorFlow入门教程集合
TensorFlow入门教程之0: BigPicture&极速入门 TensorFlow入门教程之1: 基本概念以及理解 TensorFlow入门教程之2: 安装和使用 TensorFlow入 ...
- 一 JAVA整体概念以及安装部署
JAVA 基本概念 JVM(JAVA virtual machine)java虚拟机,是java的能跨平台的核心,java的跨平台实现,就是在各种系统中布置JVM,然后java应用运行在JVM中,相 ...
- c++开发环境搭建
>>>>>>>>>>>>>>>>>>>>>开发环境搭建<<&l ...
- windows下elasticsearch配置及spring boot 简单demod的 整合
学习过程: elasticsearch 下载安装 elasticsearch-head 安装 spring boot 下elasticsearch的配置 使用ElasticsearchReposito ...
- Js/jquery获取当前日期时间及其它操作
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- 邮件服务器fixpost服务(1)
发邮件所用的协议,SMTP协议,端口TCP25 收邮件所用的协议,pop3.imap协议 邮件客户端(MUA):foxmail.闪电邮.邮件大师.outlook 搭建邮件服务器所用到的软件(MTA邮件 ...
- tp5的RBAC插件及其使用很方便的管理用户登录及操作权限
tp5-rbac 本扩展包是tp5的rbac包,使用了部分tp5的特性实现了关系型数据库中特殊数据结构的处理. 安装方法 先安装composer如果不知道怎么安装使用composer请自行百度. 打开 ...
- Keras实现简单BP神经网络
BP 神经网络的简单实现 from keras.models import Sequential #导入模型 from keras.layers.core import Dense #导入常用层 tr ...
- 使用javascript连接mqtt协议(自动重连问题)
因为之前是在rabbitmq的插件"RabbitMQ Web MQTT plugin "中看到使用了mqttws31.js的实例,由于对mqttws31不了解,网上下载了连接成功, ...