Hibernate对大数据类型的存储和查询

方式一:使用byte[] 和 char[] 映射blob 和clob类型
<p><span style="font-weight: normal;">import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Entity;
@Entity
@Table(name="bigdata1")
public class BigData1 {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	@Lob
	@Column(name="icon")
	private byte[] icon;
	@Lob
	@Column
	private char[] msg;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public byte[] getIcon() {
		return icon;
	}
	public void setIcon(byte[] icon) {
		this.icon = icon;
	}
	public char[] getMsg() {
		return msg;
	}
	public void setMsg(char[] msg) {
		this.msg = msg;
	}
	public BigData1(int id, byte[] icon, char[] msg) {
		super();
		this.id = id;
		this.icon = icon;
		this.msg = msg;
	}
	public BigData1() {
		super();
	}
	
}</span>
</p>
二:使用sql包下面的 Blob了 Clob类
<span style="font-weight: normal;">import java.sql.Blob;
import java.sql.Clob;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Entity;


@Entity
@Table(name="bigdata2")
public class BigData2 {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	@Lob
	@Column(name="icon",nullable=false)
	private Blob icon;
	@Lob
	@Column(nullable=false)
	private Clob msg;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	
	public BigData2(int id, Blob icon, Clob msg) {
		super();
		this.id = id;
		this.icon = icon;
		this.msg = msg;
	}
	public Blob getIcon() {
		return icon;
	}
	public void setIcon(Blob icon) {
		this.icon = icon;
	}
	public Clob getMsg() {
		return msg;
	}
	public void setMsg(Clob msg) {
		this.msg = msg;
	}
	public BigData2() {
		super();
	}
	
}</span>

3:测试代码
<span style="font-weight: normal;">import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.Reader;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

public class BigData1Test {
	private static Configuration configuration = null;
	private static SessionFactory sessionFactory = null;
	private static org.hibernate.service.ServiceRegistry serviceRegistry = null;
	private static Session session = null;
	static{
		configuration = new Configuration();	
	//	configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/test?characterEncoding=utf-8");
	
		configuration.configure();
		serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		session = sessionFactory.getCurrentSession();
		
	}
	public static void main(String[] args) throws Exception {
		session.beginTransaction();
		
		
		
		session.getTransaction().commit();
		
	}
	
	
	/**
	 * 对BigData1.class 的存取
	 * @throws Exception
	 */
	public static void save1() throws Exception{
		BigData1 bd = new BigData1();
		File f = new File("c:/a.jpg");
		FileInputStream fis = new FileInputStream(f);
		byte[] b = new byte[fis.available()];  
		fis.read(b);
		bd.setIcon(b);
		BufferedReader br = new BufferedReader(new FileReader(new File("c:/b.txt")));
		StringBuffer sb = new StringBuffer();
		char[] c = new char[512];
		int i = 0;
		while((i = br.read(c)) != -1){
			sb.append(new String(c, 0, i));
		}
		bd.setMsg(sb.toString().toCharArray());
		session.save(bd);
	}
	public static void get1() throws Exception{
		BigData1 bd = (BigData1) session.get(BigData1.class, 11);
		FileOutputStream fos = new FileOutputStream(new File("c:/a_a.jpg"));
		fos.write(bd.getIcon());
		fos.flush();
		fos.close();
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File("c:/a_a.txt")));
	
		bw.write(new String(bd.getMsg()));
		bw.flush();
		bw.close();
		
	}
	
	
	/**
	 * 是对 BigData2.class 的存取
	 * @throws Exception
	 */
	public static void save2() throws Exception{
		BigData2 bd = new BigData2();
		FileInputStream fis = new FileInputStream(new File("c:/a.jpg"));
		bd.setIcon(Hibernate.getLobCreator(session).createBlob(fis,fis.available()));
		BufferedReader br = new BufferedReader(new FileReader(new File("c:/a.txt")));
		StringBuffer sb = new StringBuffer();
		char[] c = new char[512];
		int i = 0;
		while((i = br.read(c)) != -1){
			sb.append(new String(c, 0, i));
		}
		bd.setMsg(Hibernate.getLobCreator(session).createClob(sb.toString()));
		session.save(bd);
		
	}
	public static void get2() throws Exception{
		BigData2 bd = (BigData2) session.get(BigData2.class, 5);
		FileOutputStream fos = new FileOutputStream(new File("c:/a_a.jpg"));
		byte[] b = new byte[1024];
		InputStream is = bd.getIcon().getBinaryStream();
		int len = 0;
		while((len = is.read(b)) != -1){
			fos.write(b, 0, len);
		}
		fos.flush();
		fos.close();
		is.close();
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File("c:/a_a.txt")));
		Reader r = bd.getMsg().getCharacterStream();
		char[] c = new char[512];
		
		while((len = r.read(c)) != -1){
			bw.write(c, 0, len);
		}
		bw.flush();
		bw.close();
		r.close();
	}
	
}</span>
Mysql中上传文件过大:Mysql中默认为1M ,在my.ini配置文件中修改或者加入 max_allowed_packet=4M 此配置
oracle中保存也可能会出现错误,我这里是jar包问题,可以在oracle安装目录 product\11.2.0\dbhome_1\jdbc\lib 这里面寻找jar包(还有就是你oracle表空间大小4M,你保存的文件数据超过了表空间大小也会保存,需要修改表空间大小)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值