Hibernate操作Blob数据
首先看数据库。数据库中新建一个BlobTable表,表中有两个字段,一个id(主键)一个picture字段是Blob类型字段。然后使用Hibernate向该数据库中写入和读取数据
在POJO类中picture属性用的是Blob类型数据。
以下看操作源代码
package dao; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.sql.Blob; import org.hibernate.LobHelper;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import Factory.HibernateSessionFactory;
import entity.Blobtable; public class BlobDao { private Session session = null;
private Transaction tran = null; public BlobDao(){
this.session = HibernateSessionFactory.getSession();
} public void saveBlob(Blobtable bigdate,String path) throws IOException{ /*InputStream in = this.getClass().getResourceAsStream(path);
byte[] bytes = new byte[in.available()];
in.read(bytes);
in.close();*/
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
LobHelper lh = session.getLobHelper();
bigdate.setPicture(lh.createBlob(bytes)); tran = session.beginTransaction();
try{
session.save(bigdate);
tran.commit();
System.out.println("插入成功! ");
}catch(Exception e){
System.out.println("插入失败!");
tran.rollback();
}finally{
HibernateSessionFactory.closeSession();
fis.close();
}
} public void getBlob(BigDecimal id,String targetpath) throws Exception{
String hql = "From Blobtable where id = ?";
Query query = session.createQuery(hql);
query.setBigDecimal(0, id);
Blobtable bt = (Blobtable) query.uniqueResult();
Blob image = bt.getPicture();
InputStream in = image.getBinaryStream();
OutputStream os = new FileOutputStream(targetpath);
int n = -1;
while((n=in.read())!=-1){
os.write(n);
}
in.close();
os.close(); }
}
package Test; import java.io.IOException;
import java.math.BigDecimal; import dao.BlobDao;
import entity.Blobtable; public class Test {
public static void main(String[] args) { BlobDao bb = new BlobDao();
Blobtable bt = new Blobtable();
bt.setId(new BigDecimal(5));
try {
String path = "f:\\a.jpg";
bb.saveBlob(bt, path);
} catch (IOException e) {
e.printStackTrace();
}
BlobDao bd = new BlobDao();
try {
bd.getBlob(new BigDecimal(1), "e:\\a.jpg");
System.out.println("写出成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Hibernate操作Blob数据的更多相关文章
- panzer 电力项目十一--hibernate操作大文本字段Blob和Clob
hibernate操作大文本字段Blob和Clob解决方案: 1.大文本字段Blob和Clob(流); 2.截串存取 第一步: 创建新表:Elec_CommonMsg_Content create t ...
- Hibernate保存Blob和Clob类型的数据
虽然非常不建议在数据库中保存Blob和Clob类型的数据,但真的要有这样的需求呢?这里记录一下使用Hibernate如何向数据库中保存Blob和Clob数据. Oracle和MySql在Blob类型上 ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- Hibernate查询所有数据的操作
Hibernate查询所有数据的操作方式有三种. 1.Query (1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hi ...
- 操作BLOB、CLOB、BFILE
BFILE 二进制文件,存储在数据库外的操作系统文件,只读的.把此文件当二进制处理. BLOB 二进制大对象.存储在数据库里的大对象,一般是图像声音等文件. CLOB ...
- C#实现MySQL数据库中的blob数据存储
在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...
- oracle 在操作blob该字段是否会产生很多redo
操作blob该字段是否会产生很多redo,答案是否定的.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob ( id ...
- hibernate操作数据库总结
这篇文章用于总结hibernate操作数据库的各种方法 一.query方式 1.hibernate使用原生态的sql语句执行数据库查询 有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就 ...
- hibernate 操作 Postgresql 数据库报 operator does not exist: integer = character varying
网上的说法如下: Java开发Postgresql 数据库兼容应用的问题,与Oracle有一些不同: Java类型映射数据库类型的不同,Oracle jdbc驱动程序处理Java String类型可正 ...
随机推荐
- python基础学习笔记——字符串方法
索引和切片: 索引:取出数组s中第3个元素:x=s[2] 切片:用极少的代码将数组元素按需处理的一种方法.切片最少有1个参数,最多有3个参数,演示如下: 我们假设下面所用的数组声明为array=[2, ...
- Django Form two
Django_Form: 1.class TeacherNewForm(Form): username = fields.CharField( required=True, error_message ...
- luogu2761 软件补丁问题
状压最短路 #include <iostream> #include <cstring> #include <cstdio> #include <queue& ...
- TPS限流
限流是高可用服务需要具备的能力之一 ,粗暴简单的就像我们之前做的并发数控制.好一点的有tps限流,可用令牌桶等算法实现.<亿级流量网站架构核心技术>一书P67限流详解也有讲.dubbo提供 ...
- 聊聊、Spring 第一篇
Spring 大家都不陌生,企业应用中很流行的一个平台.从最开始的 Servlet 控制所有,到 MVC 模式的出现.从 SSH (Struts.Spring.Hibernate) 所谓的三剑客 到 ...
- Django创建并连接数据库(实现增删改查)--ORM框架雏形
第一步:要先创建数据库(orm是不能创建数据库的) 第二步:settings里面指定连接到哪个数据库 DATABASES = { #默认使用的是sqlite3数据库 'default': { 'ENG ...
- python面向对象、模块讲解
(1)模块的介绍: 1.什么是模块 模块是一系列功能的集合体 常见的模块形式(自定义模块.第三方模块.内置模块): 1.一个module.py文件就是一个模块,文件名是module.py,而模 ...
- API生命周期第三阶段:API实施模式,以及结合swagger和项目现状的最佳模式
这篇博客,主要是宏观介绍一下开发模式,尤其是针对于目前公司前后分离的项目! 一.API实施模式概述 API实施模式,主要是三个,其中API-First又是作为一种指导思想的一种,所以,简单来说事实实施 ...
- JQuery常用的HTML页控制取值、赋值
1,关于tab页签 获取当前页签的属性: var tabsSelect=$("#easytabs").tabs("getSelected"); var titl ...
- volatile的用法
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...