当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

spring中调用存储历程[Java编程]

赞助商链接



  本文“spring中调用存储历程[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

springframework.jdbc.object.StoredProcedure是对应存储历程调用的操作对象,它通过其父类org.springframework.jdbc.object.SqlCall得到呼应的底层API支持(CallableStatementCreator),然后在此底子之上构建了调用存储历程的履行办法.

StoredProcedure是抽象类,所以需求实现呼应子类以封装对特定存储历程的调用,还记得我们在讲授JdbcTemplate调用存储历程时刻定义的存储历程吗?

CREATE PROCEDURE CountTable(IN tableName varchar(1000),OUT sqlStr varchar(1000) , INOUT v INT)
BEGIN
   set @flag = v;
   set @sql = CONCAT('select count(*) into @res from ' , tableName , ' where ACTIVE_FLAG=?');
   PREPARE stmt FROM @sql;
   EXECUTE stmt using @flag;
   DEALLOCATE PREPARE stmt;
   set v = @res;
   set sqlStr = @sql;
END

通过担当StoredProcedure,我们可认为该存储历程的调用供应一个对应的操作对象:

public class CountTableStoredProcedure extends StoredProcedure {

   private static final String PROCEDURE_NAME = "CountTable";

   public static final String IN_PARAMETER_NAME = "tableName";
   public static final String OUT_PARAMETER_NAME = "sqlStr";
   public static final String INOUT_PARAMETER_NAME = "v";

   public CountTableStoredProcedure(DataSource dataSource)
   {
     super(dataSource,PROCEDURE_NAME);
     // setFunction(true);
     declareParameter(new SqlParameter(IN_PARAMETER_NAME,Types.VARCHAR));
     declareParameter(new SqlOutParameter(OUT_PARAMETER_NAME,Types.VARCHAR));
     declareParameter(new SqlInOutParameter(INOUT_PARAMETER_NAME,Types.INTEGER));
     compile();
   }

   public CountTableResult doCountTable(String tableName,Integer v)
   {
     Map paraMap = new HashMap();
     paraMap.put(IN_PARAMETER_NAME, tableName);
     paraMap.put(INOUT_PARAMETER_NAME, v);

     Map resultMap = execute(paraMap);

     CountTableResult result = new CountTableResult();
     result.setSql((String)resultMap.get(OUT_PARAMETER_NAME));
     result.setCount((Integer)resultMap.get(INOUT_PARAMETER_NAME));
     return result;
   }
}

关于该存储历程操作对象,部份细节我们有必要关注一下:

存储历程操作对象对应的SQL是存储历程的名称,而不是真正意义上的SQL语句,当我们调用compile办法的时刻,StoredProcedure的父类SqlCall会按照你供应的存储历程名称拼装真正意义上的符合SQL92尺度的存储历程调用语句,近似于“{ call CountTable(?,?,?) }”的情势.

因为我们的CountTableStoredProcedure只针对CountTable存储历程调用,所以,该存储历程的名称我们在类一开始就声明为常量:

private static final String PROCEDURE_NAME = "CountTable";假若有多个存储历程的参数次序相同,后果处理也一样的话,你也可以将存储历程的名称声明为变量,这完好要取决于具体的利用场景.

在构造办法中,我们将“setFunction(true);”注释掉了,因为我们调用的CountTable不是一个Function,假如你要调用的存储历程范例为Function的话,你需求通过该办法将“function”的值设置为true,以奉告StoredProcedure在处理调用的时刻要辨别对待.

在complie之前通过declareParameter声明参数,这几近是雷打不动的惯例,不过,在StoredProcedure中利用declareParameter的时刻却要有所注意了:


  以上是“spring中调用存储历程[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 在Ubuntu管理iPhone/iPod SpringBoard图标
  • Visual C++ sprintf()函数用法
  • 发扬EJB、Spring思惟将组件化举行到底
  • spring在MVC层办理JPA的缓迟加载问题
  • 用spring简单实现发送邮件
  • 用Spring framework实现按时器功效
  • 关于Struts和Spring两种MVC框架的比较
  • Spring自动装配的学习
  • Spring事件配置的五种办法
  • Spring编程入门十大问题解答
  • Hibernate+Spring+Struts扩大Struts
  • J2EE新手入门之"Spring"名词注释
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .