`

在Oracle中用HibernateJDBC对图片数据的操作(更新)

阅读更多

关于如何使用JDBC来操控oracle的blob数据类型:
首先给出数据库表的结果描述:
ID VARCHAR2(64)--表关键字
IMGS BLOB --图片数据
IMGS_SIZE NUMBER(10) --图片大小
IMGS_TYPE VARCHAR2(30)--图片类型
NOTES CLOB --图片的解释
………… --这里还有其他一些字段,就不再列举出来
需求:
如果用户没有提交上传的图片数据信息,则不对IMGS字段进行修改,否则修改此信息,(这也就决定了这里的操作如果使用hibernate
的话需要用hibernate和JDBC混合编程实现)

POJO数据对象:

代码
  1. @Entity  
  2. @Table(name="image_datas")  
  3. public class ImageNotesData implements Serializable{  
  4.     private String id;  
  5.     private long imageSize;  
  6.     private String imageType;  
  7.     private String notes;  
  8.     private Blob imageData;  
  9.     @Id  
  10.     @Column(updatable = true,nullable=false,name="ID")  
  11.     public String getId(){  
  12.        return this.id;  
  13.     }  
  14.     @Column(updatable = true,nullable=true,name="NOTES")  
  15.     @Type(type="")  
  16.     public String getNotes(){  
  17.        return this.notes;  
  18.     }  
  19.     @Transient  
  20.     public String getImageType(){  
  21.        return this.imageType;  
  22.     }  
  23.     @Transient  
  24.     public long getImageSize(){  
  25.        return this.imageSize;  
  26.     }  
  27.     @Transient  
  28.     public Blob getImageData(){  
  29.        return this.imageData;  
  30.     }  
  31. }  
<script type="text/javascript">render_code();</script>

处理流程分为两步进行:
1、存储对图片数据信息的说明和其他一些非图片区数据信息;2、存储图片数据信息;
对于流程1,使用hibernate实现:

代码
  1. public void saveOrUpdateImageNodesData(ImageNodesData data){  
  2.     if(data.getId==null){  
  3.         hibUtil.save(data);//这个操作一般只会执行一次  
  4.     } else {  
  5.         hibUtil.update(data);//这个操作会因为数据信息的修改而频繁的执行  
  6.     }  
  7. }  
<script type="text/javascript">render_code();</script>
对于流程2,使用JDBC实现:
代码
  1.   public void updateImageData(String id,long size,String type,InputStream in){  
  2.     Session session = getSession();  
  3.     Connection conn = session.connection();  
  4.     session.flush();//需要注意的是这里需要调用flush来使得流程一种写入的数据在这里可以被读到  
  5.     PreparedStatement pstmt = null;  
  6.     BLOB blob = null;  
  7.     try {  
  8.         pstmt = conn.prepareStatement("update image_datas s set s.imgs =empty_blob() where s.id =?");  
  9.         pstmt.setString(1,id);  
  10.         pstmt.executeUpdate();  
  11.         pstmt = conn.prepareStatement("select s.imgs img from image_datas s where s.id= ? for update");   
  12.         pstmt.setString(1,id);   
  13.         ResultSet rs = pstmt.executeQuery();   
  14.         rs.next();  
  15.         blob = (BLOB) rs.getBlob("img");              
  16.         if(blob==null){  
  17.               
  18.         }  
  19.         int zize = in.available();  
  20.         pstmt = conn.prepareStatement("update image_datas s set s.imgs=?,s.imgs_size=?,s.imgs_type=? where id=?");   
  21.         OutputStream out = blob.getBinaryOutputStream();   
  22.         byte[] data = new byte[(int)in.available()];   
  23.         in.read(data);   
  24.         out.write(data);   
  25.         out.close();  
  26.         pstmt.setBlob(1,blob);  
  27.         pstmt.setLong(2,zize);  
  28.         pstmt.setString(3,type);  
  29.         pstmt.setString(4,id);  
  30.         pstmt.executeUpdate();  
  31.     } catch (SQLException e) {  
  32.            throw new DAOException(e);  
  33.     } catch(IOException e){  
  34.         throw new DAOException(e);  
  35.     }finally{  
  36.         JdbcHelper.close(pstmt,null);  
  37.     }  
  38. }  
<script type="text/javascript">render_code();</script>

需要注意的是因为写入“一般类型”的数据发生在写入图片数据之前,同时他们作为一个事务而存在为此在更新图片数据的时候(流程2)需要显式的调用session.flush(),否则我们不可能select 到任何在流程一中写入的数据信息

分享到:
评论

相关推荐

    hibernate 连接数据库基础源码

    【hibernate 连接数据库基础源码】的解析与详解 ...深入理解这些概念并实践源码,将对初学者掌握Hibernate及数据库操作大有裨益。在实际项目中,可以根据需求选择合适的数据库,利用Hibernate的强大功能提高开发效率。

    hibernate 相关jar包

    Hibernate是一款强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来处理数据库操作,极大地简化了Java应用程序中的数据存取工作。在Java应用开发中,Hibernate是不可或缺的一部分,尤其对于大型...

    java 论坛 项目中用过

    这涉及到对数据库中的帖子表进行CRUD(创建、读取、更新、删除)操作。 - 搜索功能:用户可以搜索关键词,系统通过查询数据库返回匹配的帖子。 - 用户个人中心:展示用户的个人信息,如发帖记录、收藏夹、好友列表...

    Hibernate入门之自己写的小例子的总结

    在本文中,我们将深入探讨如何入门使用Hibernate,一个流行的Java对象关系映射(ORM...随着对Hibernate的进一步学习,你将掌握更多的高级特性,如级联操作、事务管理、查询语言(HQL)等,从而更加高效地处理数据库操作。

    java大对象

    Java大对象(Large Object,简称LOB)是Java数据库连接(JDBC)中用来处理大量数据类型的一个概念,尤其适用于存储图像、音频、视频、文本文件等非结构化数据。在Java编程中,大对象主要涉及到Blob(Binary Large ...

    JavaEE学习笔记

    Unix系统的学习有助于加深对操作系统的理解,为Java EE应用在服务器端的部署和运行提供支持。 Core Java学习笔记: Core Java是Java的基础,包括Java语言的核心特性,如标识符、关键字、数据类型、表达式、流控制、...

    Java 通用分页

    2. 使用JDBC API:通过设置Statement的`setFetchSize()`方法来控制每次查询的数据量,但这并不等同于真正的分页,只是在结果集上做了一次内存级别的分页,对大数据量可能导致内存溢出。 3. ORM框架支持:例如...

    tongweb部署

    在TongWeb中配置数据源是一项关键任务,它直接影响到Web应用对数据库的访问效率及稳定性。 1. **启动TongWeb**并通过浏览器访问管理控制台`http://localhost:8001/`,登录账号通常是admin/tongweb。 2. **配置数据...

    java web项目开发需要掌握哪些技术.docx

    1. **Java Database Connectivity (JDBC)**:JDBC是Java访问数据库的标准API,允许开发者使用SQL语句与各种类型的数据库进行交互,如建立连接、执行查询和更新操作。它简化了数据库应用程序的编写,使得开发者可以...

    java从入门到精通全过程笔记.doc

    - `inode`:是Unix/Linux中用来存储文件元数据的结构,包括文件的存储位置。 - `ls`命令:用于列出目录中的文件,`-k`选项显示文件大小以KB为单位,`-li`显示文件的inode号。 - `find`命令:用于在文件系统中查找...

    jsp与access数据库 .doc求就jsp与access数据库 .doc

    【知识点详解】 1. JSP(JavaServer Pages):JSP是Sun ...这种方法适用于小型项目,但在大型企业级应用中,通常会使用更强大的数据库系统(如MySQL、Oracle等)和更高级的持久层框架(如Hibernate、MyBatis)。

    jee网络数据库

    而“网络数据库”在此场景下通常指的是在JEE应用中用于存储和管理数据的关系型数据库。 1. **JEE与Web数据库连接**: JEE应用程序可以使用JDBC(Java Database Connectivity)API来连接到各种类型的数据库,如...

    JSP 新闻发布

    JDBC(Java Database Connectivity)是Java中用于数据库操作的标准API。开发者可能还会用到ORM(Object-Relational Mapping)框架,如Hibernate,来简化数据库操作。 7. **JSTL(JavaServer Pages Standard Tag ...

    blog.rar_blog_jsp blog

    在博客系统中,SQL用于创建、更新、查询和管理博客文章、用户信息等数据。可能使用的数据库系统有MySQL、Oracle或PostgreSQL等。 3. JSP与SQL的交互:JDBC(Java Database Connectivity)是Java中用来连接数据库的...

    梳理的一些java开发中用上的框架和开发工具,肯定会遗漏,欢迎补充

    Gson 是Google提供的一个用来在Java对象和JSON数据之间做转换的Java库。 - **Jackson**: 工具。Jackson 是一套非常快速且功能全面的JSON处理器。 - **fastjson**: 工具。Fastjson 是阿里巴巴的开源JSON解析库,性能...

    JavaEE教程

    通过JDBC,Java程序可以连接并操作各种数据库,如MySQL、Oracle等。JDBC提供了DriverManager、Connection、Statement、ResultSet等关键类和接口。 #### 六、JSP Java Server Pages (JSP) 是一种用于创建动态Web...

    java面试题综合

    5. Hibernate与Oracle分布处理:考察ORM(对象关系映射)工具Hibernate在分布式环境下的配置和性能调优。 6. 字符串连接:"1"+"2"+"3"创建了三个对象,因为Java字符串是不可变的,每次连接都会生成新对象。 7. ...

    零基础学Java Web开发

    JSP可以通过JDBC访问数据库,实现数据查询、更新等操作,从而构建功能丰富的动态网站。 #### 三、Java Web框架 - **3.1 Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它...

    java集合框架SSH项目所需要的额jar包

    5. **数据库驱动**:根据所使用的数据库,还需要相应的JDBC驱动,例如`mysql-connector-java.jar`(MySQL),`ojdbc*.jar`(Oracle),`postgresql-jdbc.jar`(PostgreSQL)等。 6. **Servlet和JSP相关**:对于Web...

    java软件开发面试和笔试2010最新最全总结

    5. **JDBC (Java Database Connectivity)**:JDBC是Java中用来连接数据库的标准API,用于执行SQL语句和处理结果。 6. **Hibernate**:这是一个流行的ORM(对象关系映射)框架,简化了Java应用与数据库的交互,通过...

Global site tag (gtag.js) - Google Analytics