`

用hibernate操作BlobClob

阅读更多
一,操作blob图像数据
数据表login2:
nametype约束
idnumber(5)主健
usernamevarchar2(20
passwordvarchar2(20)
imageblob
descriptionclob

配置文件不在编写
java代码如下:
package dao;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.SQLException;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import entity.Login2;

public class Login2Dao {
	private Session session = null;
	private Transaction tran = null;
	private static final ThreadLocal<Session> s = new ThreadLocal<Session>();

	public Login2Dao() {
		SessionFactory factory = new Configuration().configure()
				.buildSessionFactory();
		this.session = s.get();
		if (this.session == null) {
			session = factory.openSession();
			s.set(session);
			System.out.println(session == null);
		}
		System.out.println(session == null);
		// session.close();
	}

	public int saveBlog(Login2 login, String imagePath) {
		// 读取图片的二进制数据
		try {
			InputStream in = this.getClass().getResourceAsStream(imagePath);
			System.out.println("输入流" + in == null);
			byte[] buffer = new byte[in.available()];
			in.read(buffer);
			in.close();

			login.setImage(Hibernate.createBlob(buffer));
			tran = session.beginTransaction();
			session.save(login);
			tran.commit();
			return login.getId();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}

	public void getBlob(int id, String targetPath) throws SQLException,
			IOException {
		// 使用hibernate读取blob字段
		Login2 login = (Login2) session.get(Login2.class, id);
		Blob image = login.getImage();
		// 使用javaio将blob内容复制到文件
		InputStream in = image.getBinaryStream();
		OutputStream out = new FileOutputStream(targetPath);

		int n = -1;
		while ((n = in.read()) != -1) {
			out.write(n);
		}

		in.close();
		out.close();
	}

}
//测试类
package test;

import java.io.IOException;
import java.sql.SQLException;

import dao.Login2Dao;
import entity.Login2;

public class Test2 {
public static void main(String[] args) throws SQLException, IOException {
	Login2 login=new Login2();
	login.setPassword("1111");
	login.setUsername("mada");
	int id=new Login2Dao().saveBlog(login,"../person.jpg");
	//System.out.println("id=="+id);
	//new Login2Dao().getBlob(id, "e:\\org.jpg");
	new Login2Dao().getBlob(3, "person2.jpg");
}
}


提示:在操作时,文件路径不能写绝对路径,看网上可以,还待试验
二。操作clob(针对的是字符数据)
package dao;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Clob;
import java.sql.SQLException;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import entity.Login2;

public class ClobLogin2Dao {
	//会话对象
	private Session session=null;
	//事务对象
	private Transaction tran=null;
	//threadLocal变量
	private static final ThreadLocal<Session> s=new ThreadLocal<Session>();
	
	//构造方法
	public ClobLogin2Dao(){
		Configuration config=new Configuration().configure();
		SessionFactory factory=config.buildSessionFactory();
		this.session=s.get();//怎么理解
		if(session==null){
			this.session=factory.openSession();
			s.set(session);
		}
	}
	//保存方法
	public int saveClob(Login2 login,String description){
		tran=this.session.beginTransaction();//开启事务
		login.setDescription(Hibernate.createClob(description));//把字符串转为CLOB
		session.save(login);
		tran.commit();
		return login.getId();
	}
	//输出
	public String getClob(int id) throws SQLException, IOException{
		String str="";
		Login2 login=(Login2)this.session.get(Login2.class, id);
		Clob desc=login.getDescription();
		//把clob转换成String
		Reader rd=desc.getCharacterStream();
		BufferedReader br=new BufferedReader(rd);
		/*while((str=br.readLine())==null){
			System.out.println(str);
		}*/
		 str=br.readLine();
		 return str;
	}
	}
//测试类
package test;

import java.io.IOException;
import java.sql.SQLException;

import dao.ClobLogin2Dao;
import entity.Login2;

public class TestClob {
public static void main(String[] args) throws SQLException, IOException {
	Login2 login=new Login2();
	login.setPassword("22222");
	login.setUsername("bbbs");
	String description="马达,成就优异";
	int id=new ClobLogin2Dao().saveClob(login, description);
	System.out.println("id=="+id);
	String desc=new ClobLogin2Dao().getClob(id);
	//new ClobLogin2Dao().getClob(17);
	System.out.println(desc);
}
}

注:clob斩时只实现到能存多行,取时只能取单行
分享到:
评论

相关推荐

    Hibernate操作持久化对象

    Hibernate的核心在于提供对象-关系映射(ORM)服务,使得开发者能够以面向对象的方式来管理和操作数据库中的数据,从而减少了直接使用JDBC进行数据操作时的复杂性和错误。 为什么需要Hibernate? 在传统的JDBC编程中...

    java使用hibernate操作数据库jar

    Java使用Hibernate操作数据库是现代Java应用中常见的技术实践,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库的交互。它允许开发者用Java对象来表示数据库中的记录,而无需关心底层SQL的实现...

    Hibernate操作数据库的方法

    使用Hibernate,开发者无需直接使用JDBC API,因为Hibernate封装了大部分数据库操作的细节,从而可以减少重复代码,提高开发效率。 Hibernate操作数据库时,主要通过以下几个核心组件来实现持久层操作: 1. **...

    hibernate环境搭建基本操作封装

    通过运行`Main`类,你可以看到如何使用封装后的操作来创建、查询、更新和删除User对象,从而验证你的Hibernate环境是否配置正确。 总之,搭建Hibernate环境并进行基本操作封装是Java开发中的常见任务。通过理解并...

    使用Hibernate操作数据库的7个步骤.txt

    使用Hibernate操作数据库的7个步骤.txt ,很简单的

    使用springmvc+hibernate完成增删改查

    在本项目中,"使用springmvc+hibernate完成增删改查"意味着开发者已经配置好了SpringMVC和Hibernate的环境,能够通过这两个框架进行数据操作。数据无需创建自动生成,可能指的是使用了Hibernate的自动建表功能,或者...

    \hibernate操作心得.doc

    然后,我们配置了 Hibernate 的连接设置,并使用 Hibernate 的 API 实现了对 Teacher 对象的持久化操作。 Hibernate 操作心得包括了建立 Java 项目、创建 Hibernate 库、导入用户库、加入 MySQL 驱动、创建数据库、...

    Hibernate数据库操作实例.zip

    标题"Hibernate数据库操作实例.zip"表明这是一个关于使用Hibernate框架进行数据库操作的实际案例。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发人员使用面向对象的方式来处理数据库交互,而无需...

    hibernate 简单CRUD操作

    - 创建实体类,这个类对应数据库中的表,用注解`@Entity`标识,并使用`@Table`指定表名。 - 使用`@Id`注解定义主键,`@GeneratedValue`指定主键生成策略。 - Session工厂(SessionFactory)是Hibernate的核心,...

    Java封装hibernate操作数据库.rar

    本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...

    SSH CRM 项目Hibernate操作数据字典源码(3)

    Hibernate是对象关系映射(ORM)工具,它简化了数据库操作,使开发者可以使用面向对象的方式来操作数据库。 在SSH CRM项目中,数据字典通常用来存储系统中的固定配置信息,如状态码、性别选项、地区分类等。这些...

    struts2+hibernate实现登录及增删改操作

    2. **Hibernate ORM**:Hibernate允许开发者使用Java对象来操作数据库,避免了编写大量的SQL代码。它将数据库表映射为Java实体类,表中的行对应类的实例,列对应属性。Hibernate通过配置文件或注解来定义这些映射...

    用hibernate操作多表的例子

    本教程将详细讲解如何使用Hibernate进行多表操作,这对于理解和掌握数据库之间的关联以及在实际项目中的应用至关重要。 一、Hibernate概述 Hibernate是一个开源的Java库,它提供了一种在Java应用程序中持久化对象到...

    Hibernate基本数据操作方法

    Hibernate基本数据操作方法 java struts hibernate

    hibernate与mybatis一起使用取长补短

    1. **数据持久化**: 对于常规的CRUD操作和复杂的业务逻辑,可以使用Hibernate,它能够自动处理对象的持久化,简化代码,提高开发效率。 2. **性能优化**: 对于大数据量的查询或者需要进行复杂SQL操作的部分,可以...

    hibernate使用参考文档

    Hibernate 使用参考文档 Hibernate 是一个流行的 Java持久层框架,它提供了一种...* 使用 Hibernate 实现 CRUD 操作 扩展阅读 * Hibernate 的历史发展 * Hibernate 与其他 ORM 框架的比较 * Hibernate 的优缺点分析

    Hibernate入门到精通

    要使用 Hibernate,首先需要搭建 Hibernate 的开发环境。下面是 Hibernate 环境搭建的主要步骤: 1. 映射配置文件 在 Hibernate 中,映射配置文件(hibernate.cfg.xml)是用于配置 Hibernate 的核心配置文件。该...

    Hibernate连接SQLite配置说明和方言代码

    Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...

    Could not roll back Hibernate transaction.doc

    2. 使用Hibernate提供的API:在对数据库进行操作时,应该使用Hibernate提供的API,而不是手动执行数据库操作。这样可以确保Hibernate的事务管理机制正常工作。 3. 检查事务配置:检查Hibernate的事务配置,确保事务...

    HIBERNATE FOR NETBEANS 数据操作方法

    当这两者结合时,开发者可以更方便地使用Hibernate进行数据操作。下面将详细介绍如何在NetBeans中配置Hibernate以及使用它进行数据操作。 1. **安装Hibernate插件** - 首先,确保你已经安装了NetBeans IDE的最新...

Global site tag (gtag.js) - Google Analytics