`

spring2通过jdbc的方式读取、更新数据库的clob或者blob类型的数据

    博客分类:
  • SSH
阅读更多

      今天由于项目的需要,必须在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());

 }

}

0
1
分享到:
评论
1 楼 enet_java 2010-10-27  
多谢!!!

相关推荐

    java中(注解符)处理Clob(blob)类型

    Clob(Character Large OBject)类型和 Blob(Binary Large OBject)类型是数据库中两种常用的大规模数据类型。Clob 类型用于存储大规模的字符数据,而 Blob 类型用于存储大规模的二进制数据。在 Java 中,处理 Clob...

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    使用Jdbc4操作Blob,Clob

    当涉及到处理大型对象(LOBs)如Blobs(Binary Large Objects)和Clobs(Character Large Objects)时,JDBC4提供了一种更为便捷的方式来操作这些数据类型。这篇博客“使用Jdbc4操作Blob,Clob”将深入讲解如何利用...

    spring oracle blob

    根据提供的标题、描述以及部分代码内容,我们可以整理出关于如何在Spring框架中处理Oracle数据库中的BLOB类型数据的相关知识点。 ### 一、BLOB类型简介 BLOB(Binary Large Object)是二进制大对象的缩写,通常...

    spring blob相关

    我们可以通过ResultSet的getBlob方法获取Blob对象,或者通过PreparedStatement的setBlob方法设置Blob数据。 4. **流处理**:由于BLOB可能包含大量数据,因此通常使用输入/输出流进行读写操作,以避免一次性加载整个...

    spring+hibernate操作oracle的clob字段

    在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`lobHandler`属性,用于处理CLOB和BLOB类型的数据。这确保了Spring和Hibernate能够正确地与Oracle数据库交互处理大对象。 ```xml ...

    java(jdbc)学习

    JDBC支持各种数据类型,包括基本数据类型(如INT、VARCHAR)、日期类型(DATE、TIME、TIMESTAMP)、大文本类型(CLOB)和大二进制对象(BLOB)。 #### 六、DAO 设计模式 DAO(Data Access Object)设计模式用于...

    Spring.3.x企业应用开发实战(完整版).part2

    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字段案例

    在Spring框架中,LOB(Large Object)字段通常用于存储大数据,如BLOB(Binary Large Object)用于二进制数据,如图片或文档,CLOB(Character Large Object)用于字符数据,如长文本。本篇文章将深入探讨如何在...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    Spring3.x企业应用开发实战(完整版) part1

    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 自增键的...

    Java_JDBC学习教程 由浅入深.doc

    2. **建立数据库连接:** 通过 `DriverManager.getConnection(url, username, password);` 方法建立连接。 3. **创建 Statement 对象:** 通过 `connection.createStatement();` 创建。 4. **执行 SQL 语句:** 使用...

    Spring+Hibernate处理Oracle lob字段(一)

    在Oracle数据库中,LOB字段主要有BLOB(Binary Large Object)和CLOB(Character Large Object)两种类型,分别用于存储二进制和字符数据。处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中...

    ojdbc6-1.jar

    在Spring Boot项目中,使用这个驱动可以帮助开发者连接并操作Oracle数据库,进行数据的读取、写入和其他数据库管理任务。 首先,了解JDBC(Java Database Connectivity)是Java语言访问数据库的标准API,它提供了一...

    Spring中文帮助文档

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Spring API

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    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...

Global site tag (gtag.js) - Google Analytics