关于如何使用JDBC来操控oracle的blob数据类型:
首先给出数据库表的结果描述:
ID VARCHAR2(64)--表关键字
IMGS BLOB --图片数据
IMGS_SIZE NUMBER(10) --图片大小
IMGS_TYPE VARCHAR2(30)--图片类型
NOTES CLOB --图片的解释
………… --这里还有其他一些字段,就不再列举出来
需求:
如果用户没有提交上传的图片数据信息,则不对IMGS字段进行修改,否则修改此信息,(这也就决定了这里的操作如果使用hibernate
的话需要用hibernate和JDBC混合编程实现)
POJO数据对象:
代码
- @Entity
- @Table(name="image_datas")
- public class ImageNotesData implements Serializable{
- private String id;
- private long imageSize;
- private String imageType;
- private String notes;
- private Blob imageData;
- @Id
- @Column(updatable = true,nullable=false,name="ID")
- public String getId(){
- return this.id;
- }
- @Column(updatable = true,nullable=true,name="NOTES")
- @Type(type="")
- public String getNotes(){
- return this.notes;
- }
- @Transient
- public String getImageType(){
- return this.imageType;
- }
- @Transient
- public long getImageSize(){
- return this.imageSize;
- }
- @Transient
- public Blob getImageData(){
- return this.imageData;
- }
- }
<script type="text/javascript">render_code();</script>
处理流程分为两步进行:
1、存储对图片数据信息的说明和其他一些非图片区数据信息;2、存储图片数据信息;
对于流程1,使用hibernate实现:
代码
- public void saveOrUpdateImageNodesData(ImageNodesData data){
- if(data.getId==null){
- hibUtil.save(data);
- } else {
- hibUtil.update(data);
- }
- }
<script type="text/javascript">render_code();</script>
对于流程2,使用JDBC实现:
代码
- public void updateImageData(String id,long size,String type,InputStream in){
- Session session = getSession();
- Connection conn = session.connection();
- session.flush();
- PreparedStatement pstmt = null;
- BLOB blob = null;
- try {
- pstmt = conn.prepareStatement("update image_datas s set s.imgs =empty_blob() where s.id =?");
- pstmt.setString(1,id);
- pstmt.executeUpdate();
- pstmt = conn.prepareStatement("select s.imgs img from image_datas s where s.id= ? for update");
- pstmt.setString(1,id);
- ResultSet rs = pstmt.executeQuery();
- rs.next();
- blob = (BLOB) rs.getBlob("img");
- if(blob==null){
-
- }
- int zize = in.available();
- pstmt = conn.prepareStatement("update image_datas s set s.imgs=?,s.imgs_size=?,s.imgs_type=? where id=?");
- OutputStream out = blob.getBinaryOutputStream();
- byte[] data = new byte[(int)in.available()];
- in.read(data);
- out.write(data);
- out.close();
- pstmt.setBlob(1,blob);
- pstmt.setLong(2,zize);
- pstmt.setString(3,type);
- pstmt.setString(4,id);
- pstmt.executeUpdate();
- } catch (SQLException e) {
- throw new DAOException(e);
- } catch(IOException e){
- throw new DAOException(e);
- }finally{
- JdbcHelper.close(pstmt,null);
- }
- }
<script type="text/javascript">render_code();</script>
需要注意的是因为写入“一般类型”的数据发生在写入图片数据之前,同时他们作为一个事务而存在为此在更新图片数据的时候(流程2)需要显式的调用session.flush(),否则我们不可能select 到任何在流程一中写入的数据信息
分享到:
相关推荐
【hibernate 连接数据库基础源码】的解析与详解 ...深入理解这些概念并实践源码,将对初学者掌握Hibernate及数据库操作大有裨益。在实际项目中,可以根据需求选择合适的数据库,利用Hibernate的强大功能提高开发效率。
Hibernate是一款强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来处理数据库操作,极大地简化了Java应用程序中的数据存取工作。在Java应用开发中,Hibernate是不可或缺的一部分,尤其对于大型...
这涉及到对数据库中的帖子表进行CRUD(创建、读取、更新、删除)操作。 - 搜索功能:用户可以搜索关键词,系统通过查询数据库返回匹配的帖子。 - 用户个人中心:展示用户的个人信息,如发帖记录、收藏夹、好友列表...
在本文中,我们将深入探讨如何入门使用Hibernate,一个流行的Java对象关系映射(ORM...随着对Hibernate的进一步学习,你将掌握更多的高级特性,如级联操作、事务管理、查询语言(HQL)等,从而更加高效地处理数据库操作。
Java大对象(Large Object,简称LOB)是Java数据库连接(JDBC)中用来处理大量数据类型的一个概念,尤其适用于存储图像、音频、视频、文本文件等非结构化数据。在Java编程中,大对象主要涉及到Blob(Binary Large ...
Unix系统的学习有助于加深对操作系统的理解,为Java EE应用在服务器端的部署和运行提供支持。 Core Java学习笔记: Core Java是Java的基础,包括Java语言的核心特性,如标识符、关键字、数据类型、表达式、流控制、...
2. 使用JDBC API:通过设置Statement的`setFetchSize()`方法来控制每次查询的数据量,但这并不等同于真正的分页,只是在结果集上做了一次内存级别的分页,对大数据量可能导致内存溢出。 3. ORM框架支持:例如...
在TongWeb中配置数据源是一项关键任务,它直接影响到Web应用对数据库的访问效率及稳定性。 1. **启动TongWeb**并通过浏览器访问管理控制台`http://localhost:8001/`,登录账号通常是admin/tongweb。 2. **配置数据...
1. **Java Database Connectivity (JDBC)**:JDBC是Java访问数据库的标准API,允许开发者使用SQL语句与各种类型的数据库进行交互,如建立连接、执行查询和更新操作。它简化了数据库应用程序的编写,使得开发者可以...
- `inode`:是Unix/Linux中用来存储文件元数据的结构,包括文件的存储位置。 - `ls`命令:用于列出目录中的文件,`-k`选项显示文件大小以KB为单位,`-li`显示文件的inode号。 - `find`命令:用于在文件系统中查找...
【知识点详解】 1. JSP(JavaServer Pages):JSP是Sun ...这种方法适用于小型项目,但在大型企业级应用中,通常会使用更强大的数据库系统(如MySQL、Oracle等)和更高级的持久层框架(如Hibernate、MyBatis)。
而“网络数据库”在此场景下通常指的是在JEE应用中用于存储和管理数据的关系型数据库。 1. **JEE与Web数据库连接**: JEE应用程序可以使用JDBC(Java Database Connectivity)API来连接到各种类型的数据库,如...
JDBC(Java Database Connectivity)是Java中用于数据库操作的标准API。开发者可能还会用到ORM(Object-Relational Mapping)框架,如Hibernate,来简化数据库操作。 7. **JSTL(JavaServer Pages Standard Tag ...
在博客系统中,SQL用于创建、更新、查询和管理博客文章、用户信息等数据。可能使用的数据库系统有MySQL、Oracle或PostgreSQL等。 3. JSP与SQL的交互:JDBC(Java Database Connectivity)是Java中用来连接数据库的...
Gson 是Google提供的一个用来在Java对象和JSON数据之间做转换的Java库。 - **Jackson**: 工具。Jackson 是一套非常快速且功能全面的JSON处理器。 - **fastjson**: 工具。Fastjson 是阿里巴巴的开源JSON解析库,性能...
通过JDBC,Java程序可以连接并操作各种数据库,如MySQL、Oracle等。JDBC提供了DriverManager、Connection、Statement、ResultSet等关键类和接口。 #### 六、JSP Java Server Pages (JSP) 是一种用于创建动态Web...
5. Hibernate与Oracle分布处理:考察ORM(对象关系映射)工具Hibernate在分布式环境下的配置和性能调优。 6. 字符串连接:"1"+"2"+"3"创建了三个对象,因为Java字符串是不可变的,每次连接都会生成新对象。 7. ...
JSP可以通过JDBC访问数据库,实现数据查询、更新等操作,从而构建功能丰富的动态网站。 #### 三、Java Web框架 - **3.1 Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它...
5. **数据库驱动**:根据所使用的数据库,还需要相应的JDBC驱动,例如`mysql-connector-java.jar`(MySQL),`ojdbc*.jar`(Oracle),`postgresql-jdbc.jar`(PostgreSQL)等。 6. **Servlet和JSP相关**:对于Web...
5. **JDBC (Java Database Connectivity)**:JDBC是Java中用来连接数据库的标准API,用于执行SQL语句和处理结果。 6. **Hibernate**:这是一个流行的ORM(对象关系映射)框架,简化了Java应用与数据库的交互,通过...