- 浏览: 255538 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (217)
- java 基础 (36)
- flex (1)
- structs 2.0 (5)
- oracle 学习过程 (20)
- j2ee (63)
- c/s java (0)
- javaScript (24)
- jdom (1)
- jquery (1)
- java模式 (1)
- Datebase common konwledge (3)
- JfreeChart (3)
- html (3)
- sql server (6)
- tomcat servlet (4)
- lucene (1)
- Linux (3)
- 常见注意 (6)
- hibernate (2)
- jsp页面 (3)
- effective Java (1)
- spring (2)
- Spark (1)
- json (0)
- JMS (1)
- 电脑故障 (2)
- mysql (1)
- JBPM (2)
- java 线程 (1)
- oracle优化 (1)
- 安全 (1)
- hadoop (0)
- 算法 (1)
- hbase (0)
最新评论
-
mfhappy:
你好,你这个导出的文件中如果有图片你怎么处理??
jsp 导出excel(利用excel本身另存为html) -
丹寺丁:
...
jquery 解析 java 后台的 json数据 -
xurichusheng:
不直接诶生成想要的对象,而是让客户端利用所有必要的参数 ...
重叠构造器、Builder模式 -
wen121221222:
感谢啊!困恼我一个下午的问题终于解决了
java.lang.NoClassDefFoundError: javax/mail/Authenticator异常 -
gaoyanglovejava:
不错。就是这么解决的。多谢
The project is not a myEclipse hibernate project
1.没有spring框架,简单jdbc中应用的例子
//这是一个更新操作 /** * 在数据库中插入二进制数据 * @param userid 进行该数据操作的用户名 * @param userip 进行该数据操作的用户ip地址 * @param sql 先进行插入数据库操作的sql语句,二进制字段为EMPTY_CLOB() * @param tablename 进行数据操作的数据表名称 * @param keyfield 用来查找插入记录的条件 * @param clobfield 数据库的二进制字段 * @param clobcontent 要插入clob字段内容 * @return 操作成功返回true,操作失败返回false */ public boolean clobInsert(String userid,String userip,String sql,String tablename,String keyfield,String clobfield,String clobcontent) { try { boolean defaultCommit = conn.getAutoCommit(); conn.setAutoCommit(false); Statement mstmt = conn.createStatement(); mstmt.executeUpdate(sql); String sqltext = "select "+clobfield+" from "+tablename+" where "+keyfield+" for update"; ResultSet rs = mstmt.executeQuery(sqltext); if(rs.next()) { oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob(1); clob.putString(1,clobcontent); String msql="update "+tablename+" set "+clobfield+"=? where "+keyfield; PreparedStatement pstmt = conn.prepareStatement(msql); pstmt.setClob(1,clob); pstmt.executeUpdate(); pstmt.close(); } rs.close(); mstmt.close(); conn.commit(); conn.setAutoCommit(defaultCommit); return true; } catch(SQLException ex) { errlogs.writeSyslog(this.getClass().getName()+":"+userid+" "+userip+":clobInsert(String userid,String userip,String sql,String tablename,String keyfield,String clobfield,String clobcontent):SQLException:"+ ex.getMessage()+" sql:"+sql); return false; } }
下面是一个读取流,将流中的内容更新到需要更改的clob字段中
/** * 在数据库中插入二进制数据 * @param userid 进行该数据操作的用户名 * @param userip 进行该数据操作的用户ip地址 * @param sql 先进行插入数据库操作的sql语句,二进制字段为EMPTY_BLOB() * @param tablename 进行数据操作的数据表名称 * @param keyfield 用来查找插入记录的条件 * @param blobfield 数据库的二进制字段 * @param in 要插入数据库的二进制数据流 * @param dbname 数据源名称 * @return 操作成功返回true,操作失败返回false */ public boolean blobInsert(String userid,String userip,String sql,String tablename,String keyfield,String blobfield,BufferedInputStream in,String dbname) { try { Connection m_conn = getConn(dbname); boolean defaultCommit = m_conn.getAutoCommit(); m_conn.setAutoCommit(false); Statement mstmt = m_conn.createStatement(); mstmt.executeUpdate(sql); String sqltext = "select "+blobfield+" from "+tablename+" where "+keyfield+" for update"; ResultSet rs = mstmt.executeQuery(sqltext); if(rs.next()) { oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1); BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream()); int c; while ((c = in.read()) != -1) { out.write(c); } in.close(); } rs.close(); mstmt.close(); m_conn.commit(); m_conn.setAutoCommit(defaultCommit); return true; } catch(IOException e) { errlogs.writeSyslog(this.getClass().getName()+":"+"blobInsert(String userid,String userip,String sql,String tablename,String keyfield,String blobfield,BufferedInputStream in,String dbname): "+userid+" "+userip+"IOException:"+ e.getMessage()); return false; } catch(SQLException ex) { errlogs.writeSyslog(this.getClass().getName()+":"+userid+" "+userip+":blobInsert(String userid,String userip,String sql,String tablename,String keyfield,String blobfield,BufferedInputStream in,String dbname):SQLException:"+ ex.getMessage()+" sql:"+sql); return false; } }
二。下面是在spring 配置中的应用
<!-- 使用spring+hibernate处理oracle CLOB-->
要想使用spring封装处理CLOB或BLOB字段,就应该先将OraclelobHandler注入到sessionFactory中
<!-- SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <!-- 将 LobHandler 注入到 SessionFactory 中 --> <property name="lobHandler"> <ref bean="oracleLobHandler" /> </property>
接下来就是配置oracleLobHandler了 ,分两种情况一种是10g的数据库,一种是9i的数据库
9i的情况
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
//上面的class如果是c3p0或者其他数据池的情况需要改变class的值
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor" />
</property>
</bean>
10g的情况
(1).声明一个处理句柄:
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
(2).在sessionFactory中注入lobHandler:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="lobHandler" ref="lobHandler"/>
</bean>
在类中应用
*.hbm.xml配置修改如下:
a:操作blob,java类的成员变量类型设置为byte[],映射文件对应字段类型设置为:
org.springframework.orm.hibernate3.support.BlobByteArrayType
b:操作clob,java类的成员变量类型设置为String,映射文件对应字段类型设置为:
org.springframework.orm.hibernate3.support.ClobStringType
使用的时候不用额外考虑,可以直接象平常使用就可以了。很方便!
业务逻辑层对该字段的操作必须需要在有事务管理的方法中使用,否则会报:
发表评论
-
远程调用servlet
2012-09-12 16:26 3983//发起请求、先写发送(out)、然后等待度(in) URL ... -
基于ssh的项目的单元测试
2012-08-01 13:55 978package com.csoft.ta.util; imp ... -
JBPM设计器乱码问题
2012-06-30 13:44 769修改eclipse安装跟目录下的eclipse.ini文件,在 ... -
项目中读取文件
2012-03-13 18:31 812import java.io.BufferedReader;i ... -
项目中配置log4j
2012-03-08 10:26 888<!--如果不定义webAppRootKey参数,那么w ... -
qq album
2012-01-05 23:02 1029此文章完全转自他人博客(用于个人学习记录) 这个功能的实现关 ... -
关于quartz 2.x 一些记录
2011-12-30 14:27 1194功能需要 审计(即对不同规则的定制的东西进行轮巡)如果每一个轮 ... -
JavaScript动态操作表格,添加,删除行、列及单元格
2011-12-27 16:11 798<html> <head> < ... -
jsp 导出excel(利用excel本身另存为html)
2011-12-27 16:06 4514<%@page contentType="ap ... -
jsp 导出excel
2011-11-21 16:09 893<%@page contentType="ap ... -
java mail 应用
2011-09-22 10:02 860以下全部copy from http://www.cnbl ... -
quartz 在 spring静态、动态配置
2011-09-20 14:55 1178项目要求动态改变配置时间,动态改变quartz的 cron表达 ... -
JMX简单示例
2011-09-02 16:40 900以下文章摘自网络仅供学习用 1.编写一个以MBean ... -
cron表达式
2011-08-01 16:59 831以下文章复制自他出: 一个Cron-表达式是一个由六至七个 ... -
不同数据库的数据库类型及对应的jdbc类型
2011-07-27 12:47 1205public static void main(String ... -
Dom4j的使用
2011-06-15 18:08 759Dom4j 使用简介 作 ... -
SVN update时候报错的解决办法。。Working copy not locked; this is probably a bug, please rep
2011-06-01 09:02 5140今天上午CVS服务器突然坏了。。改用svn,安装完插件,连到我 ... -
hibernate 延迟加载
2011-05-12 17:25 699延迟加载: 延迟加 ... -
hibernate 一级缓存和二级缓存
2011-05-12 17:09 888一级缓存 Hibernate框架一级缓存的特点: 1.它是hi ... -
读取Blob字段图片、并进行缩放放到页面上
2011-03-29 15:15 4166整个流程分为四步,连接oracle数据库 -> 读取bl ...
相关推荐
在Spring框架中,LOB(Large Object)字段通常用于存储大数据,如BLOB(Binary Large Object)用于二进制数据,如图片或文档,CLOB(Character Large Object)用于字符数据,如长文本。本篇文章将深入探讨如何在...
这是因为数据库中的CLOB字段更适合存储文本数据,而不是二进制数据。下面是一个Java方法,用于将图片文件转换为Byte数组: ```java public byte[] image2byte(String pathName) { byte[] data = null; ...
文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...
在"ssm 整合+分页"的项目中,我们不仅能看到这三个框架的基本功能,还能看到一些额外的功能如分页、文件上传下载以及CLOB字段的操作。 首先,Spring框架作为核心,负责管理整个应用的依赖注入(DI)和面向切面编程...
6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...
6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...
Spring MVC 是一个强大的Java web开发框架,用于构建可维护、可扩展且松散耦合的Web应用程序。在本文中,我们将深入探讨Spring MVC中的各种注解,这些注解对于理解和使用Spring MVC至关重要。 1. **@Service**: 这...
这通常用于存储图片或大文件,Hibernate用`byte[]`或`org.springframework.web.multipart.MultipartFile`来处理。 7. **CLOB(字符大对象)**:用于存储大量文本数据,如XML文档,对应的Java类型是`java.sql.Clob`...
1. **LOB字段处理**:SSH提供了处理大对象(LOB)字段的方法,如BLOB和CLOB,确保大数据类型的存储和检索。 2. **文件上传**:SSH框架支持文件上传,通常通过Struts2的上传组件实现,需要注意文件大小限制和安全性...
开发者需要了解如何在实体类中声明CLOB字段,配置映射,以及如何在服务层进行插入、更新和查询操作。 综合以上,这个案例涵盖了SSH框架的综合应用,包括数据交换与报表(Excel导入导出)、用户界面增强(ueditor)...
- **相关框架引入web工程**:配置Spring、Struts 2和Hibernate之间的协作。 - **把相关对象及对象的关系交给spring管理**:使用Spring进行依赖注入和事务管理。 - **Ssh应用——无刷新分页**:实现不刷新页面即可...
文中提及的CLOB(Character Large Object)是一种数据库字段类型,它可以存储大量文本数据。数据库技术在管理会议信息、用户数据等方面起到了核心作用。 17. 编程语言和脚本 诸如VBScript、PHP和Perl等编程语言和...
7. **性能优化**:由于将图片保存为数据流可能导致数据库体积增大,影响查询性能,有时会采用BLOB或CLOB字段来存储大对象。但更优的做法是使用文件存储系统(如Amazon S3或自建的文件服务器),只在数据库中存储文件...