今天由于项目的需要,必须在spring下通过jdbc的方式进行读取和更新clob类型的数据,刚开始的时候,我直接通过spring获取数据连接,然后用PreparedStatement进行处理,但结果却是发生错误,后来参考了一下spring的官方文档,得知运用LobCreator类可以达到目的,于是通过查阅API经过多番的修改调试后,终于解决问题,代码片段如下,附件的文件是详细的代码。
保存数据到clob字段的方法:
/**
* 保存到数据库
*
* @param routerList
*/
public static void saveToDatabase(List<CustomerRouter> routerList) {
if (routerList != null && routerList.size() > 0) {
// 保存动作
try {
final List<CustomerRouter> list = routerList;
//插入数据的sql语句
final String insertSql = "insert into customer_router(" + "ID,"
+ "START_CUSTOMER_CODE," + "END_CUSTOMER_CODE,"
+ "ROUTER_DISTANCE," + "ROUTER_DISTANCE_EX,"
+ "ROAD_ID," + "ROUTER_LINE) "
+ "values(CUSTOMER_ROUTER_SEQ.NEXTVAL," + "?," + "?,"
+ "?," + "?," + "?," + "?" + ")";
//更新数据的sql语句
final String updateSql = "update customer_router " +
"set ROUTER_DISTANCE = ?," +
"ROUTER_DISTANCE_EX = ?," +
"ROAD_ID = ?," +
"ROUTER_LINE = ? " +
"where START_CUSTOMER_CODE = ? " +
"and END_CUSTOMER_CODE = ? ";
TransactionTemplate tt = DBUtil.getTransactionTemplate();
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus ts) {
JdbcTemplatePlus jdbcTemplate = DBUtil.getJdbcTemplate();
for (CustomerRouter router : list) {
OracleLobHandler lobHandler = DBUtil.getLobHandler();
//先更新
if(DEBUG)System.out.println("更新");
Object obj = jdbcTemplate.execute(updateSql, new MyLobCreps1(lobHandler,router));
int updateRows = ((Integer)obj).intValue();
if(updateRows == 0){//如果不存在,则插入
if(DEBUG)System.out.println("插入");
jdbcTemplate.execute(insertSql,new MyLobCreps(lobHandler,router));
}
}
return null;
}
});
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
MyLobCreps类的内容:
public class MyLobCreps extends AbstractLobCreatingPreparedStatementCallback{
CustomerRouter router = null;
public MyLobCreps(LobHandler arg0,CustomerRouter router) {
super(arg0);
this.router = router;
// TODO Auto-generated constructor stub
}
@Override
protected void setValues(
PreparedStatement ps,
LobCreator lc)
throws SQLException,
DataAccessException {
ps.setString(1,router.getStartCustomerCode());
ps.setString(2,router.getEndCustomerCode());
ps.setFloat(3,router.getRouterDistance());
ps.setFloat(4,router.getRouterDistanceEx());
lc.setClobAsString(ps, 5, router.getRoadId());
lc.setClobAsString(ps, 6, router.getRouterLine());
}
}
分享到:
相关推荐
Clob(Character Large OBject)类型和 Blob(Binary Large OBject)类型是数据库中两种常用的大规模数据类型。Clob 类型用于存储大规模的字符数据,而 Blob 类型用于存储大规模的二进制数据。在 Java 中,处理 Clob...
spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。
当涉及到处理大型对象(LOBs)如Blobs(Binary Large Objects)和Clobs(Character Large Objects)时,JDBC4提供了一种更为便捷的方式来操作这些数据类型。这篇博客“使用Jdbc4操作Blob,Clob”将深入讲解如何利用...
根据提供的标题、描述以及部分代码内容,我们可以整理出关于如何在Spring框架中处理Oracle数据库中的BLOB类型数据的相关知识点。 ### 一、BLOB类型简介 BLOB(Binary Large Object)是二进制大对象的缩写,通常...
我们可以通过ResultSet的getBlob方法获取Blob对象,或者通过PreparedStatement的setBlob方法设置Blob数据。 4. **流处理**:由于BLOB可能包含大量数据,因此通常使用输入/输出流进行读写操作,以避免一次性加载整个...
在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`lobHandler`属性,用于处理CLOB和BLOB类型的数据。这确保了Spring和Hibernate能够正确地与Oracle数据库交互处理大对象。 ```xml ...
JDBC支持各种数据类型,包括基本数据类型(如INT、VARCHAR)、日期类型(DATE、TIME、TIMESTAMP)、大文本类型(CLOB)和大二进制对象(BLOB)。 #### 六、DAO 设计模式 DAO(Data Access Object)设计模式用于...
11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的...
在Spring框架中,LOB(Large Object)字段通常用于存储大数据,如BLOB(Binary Large Object)用于二进制数据,如图片或文档,CLOB(Character Large Object)用于字符数据,如长文本。本篇文章将深入探讨如何在...
文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...
11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的...
2. **建立数据库连接:** 通过 `DriverManager.getConnection(url, username, password);` 方法建立连接。 3. **创建 Statement 对象:** 通过 `connection.createStatement();` 创建。 4. **执行 SQL 语句:** 使用...
在Oracle数据库中,LOB字段主要有BLOB(Binary Large Object)和CLOB(Character Large Object)两种类型,分别用于存储二进制和字符数据。处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中...
在Spring Boot项目中,使用这个驱动可以帮助开发者连接并操作Oracle数据库,进行数据的读取、写入和其他数据库管理任务。 首先,了解JDBC(Java Database Connectivity)是Java语言访问数据库的标准API,它提供了一...
处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...
处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...
14.2.4 blob与clob 480 14.2.5 交易简介 481 14.2.6 metadata简介 489 14.2.7 rowset简介 492 14.3 重点复习 496 14.4 课后练习 497 chapter15 反射与类加载器 499 15.1 运用反射 500 15.1.1 class...