`

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容器中创建 ...

    精心整理的ssh2 一些错误问题的记录(推荐)

    该错误通常出现在Spring框架中,当试图处理大型对象(如BLOB或CLOB)但Spring配置中未提供适当的LobHandler时会抛出。为了解决这个问题,需要在Spring配置文件中添加对LobHandler的支持。 ### 错误六:at java.util...

Global site tag (gtag.js) - Google Analytics