JdbcTemplate调用存储过程的例子

时间:2021-09-25 15:45:40

public String doJPrint(final PrintVO vo) {
  String pano = seqBo.sequence(Seq.pano.name);
  if (pano == null || pano.isEmpty()) {
   return null;
  }
  final String lsqz = pano.substring(0, 8);
  final int num = Integer.valueOf(pano.substring(8, pano.length()));
  String sql = "{call proc_JPrintBarcode(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
  return jt.execute(sql, new CallableStatementCallback<String>() {

   @Override
   public String doInCallableStatement(CallableStatement stmt)
     throws SQLException, DataAccessException {
    stmt.setString(1, vo.getCpph());
    stmt.setString(2, vo.getZyy());
    stmt.setTimestamp(3, new java.sql.Timestamp(
      vo.getCrea().getTime()));
    stmt.setDate(4, new java.sql.Date(vo.getScrq().getTime()));
    stmt.setInt(5, vo.getBzq());
    stmt.setString(6, Pklx.center.key);
    stmt.setString(7, Pklx.small.key);
    stmt.setInt(8, vo.getQuanta());
    stmt.setString(9, vo.getPrno());
    stmt.setString(10, vo.getPtype());
    stmt.setInt(11, Pklx.center.len);
    stmt.setString(12, vo.getPmark());
    stmt.setString(13, vo.getDdno());
    stmt.setString(14, vo.getDdnm());
    stmt.setString(15, BStat.init.key);
    stmt.setString(16, CodeConstant.SN_CPLB_HZP);
    stmt.setString(17, lsqz);
    stmt.setInt(18, num);

    //下面设置存储过程的返回参数类型

    stmt.registerOutParameter(19, Types.VARCHAR);
    stmt.registerOutParameter(20, Types.VARCHAR);
    stmt.registerOutParameter(21, Types.INTEGER);
    stmt.registerOutParameter(22, Types.INTEGER);
    stmt.execute();

    //获得存储过程的返回值

    return "{cprefix:\"" + stmt.getString(19) + "\",sprefix:\""
      + stmt.getString(20) + "\",startC:" + stmt.getInt(21)
      + ",startS:" + stmt.getInt(22) + "}";
   }
  });
 }

 

下面的存储过程的描述:

ALTER PROCEDURE [dbo].[proc_JPrintBarcode]
 --产品批号
 @Cpph varchar(12),
 --质检员
 @Zyy varchar(16),
 --打印日期
 @Crea datetime,
 --生产日期
 @Scrq datetime,
 --保质期年份
 @Bzq int,
 --中包包装类别
 @CPklx varchar(5),
 --小包包装类别
 @SPklx varchar(5),
 --打印数量
 @Quanta int,
 --打印产品编号
 @Prno varchar(64),
 --普通标签或特殊标签
 @Ptype varchar(4),
 --标签流水号长度
 @Len int,
 --特殊标签号码标记
 @Pmark varchar(5),
 --打印者编号
 @Ddno varchar(3),
 --打印者名称
 @Ddnm varchar(16),
 --标签状态
 @Stat varchar(6),
 --化妆品
 @Hzp varchar(6),
 --操作流水号前缀
 @Lsqz varchar(8),
 --操作流水号
 @Num int,
 --
 @CPrefix varchar(16)='' output,
 --
 @SPrefix varchar(16)='' output,
 --中包打印标签开始产品序号
 @StartC int='' output,
 --小包打印标签开始产品序号
 @StartS int='' output
AS
BEGIN

.......