现在的位置: 首页 > 综合 > 正文

在JAVA中调用存储过程、并将结果取出来一例

2014年08月19日 ⁄ 综合 ⁄ 共 1481字 ⁄ 字号 评论关闭
1)、编写在seq_block取应表的流水号、并将该流水号在取完之后加一、如果没有存在指定的表的时候加放与该表名对应的记录的存储过程:

Java代码 复制代码
  1. create procedure getIdxByTablename(@tablename varchar(50),@outIdx int output)   
  2.   
  3. as    
  4.   
  5. begin   
  6.   
  7.  declare @idx int  
  8.   
  9.  declare @currentTableRecord int  
  10.   
  11.  select @currentTableRecord=count(*) from seq_block where name=@tablename  
  12.   
  13.  if @currentTableRecord=0--如果要查的表的idx不存在,就插入该记录,并设值为,返回   
  14.   
  15.   begin   
  16.   
  17.    insert into seq_block(name,idx) values(@tablename,2)   
  18.   
  19.    set @outIdx=1;   
  20.   
  21.   end   
  22.   
  23.  else--如果存在就正常操作   
  24.   
  25.   begin   
  26.   
  27.    select @idx=idx from seq_block where name=@tablename  
  28.   
  29.    update seq_block set idx=(@idx+1) where name=@tablename  
  30.   
  31.    set @outIdx=@idx  
  32.   
  33.   end    
  34.   
  35. End  

注:表结构为:

name(varchar)|idx(int)

2)、编写调用的业务逻辑,该业务逻辑可将取得的对应表的流水号,并将其赋给指定的节点:

Java代码 复制代码
  1. public static int getNextSequenceNumber(Document doc, BizContext param) throws Exception{   
  2.   
  3. / 设置赋值节点   
  4.   
  5.  Node node = (Node) param.getParaObjectAt(0);   
  6.   
  7. / 取得要取idx的表名   
  8.   
  9.  String tablename = (String) param.getParaObjectAt(1);   
  10.   
  11. / 执行存储过程的SQL语句   
  12.   
  13.  String strSQL = "{call getIdxByTablename(?,?)}";   
  14.   
  15. / 取得数据库连接   
  16.   
  17.  PersistenceBroker persistencebroker = param.getDBBroker();   
  18.   
  19.  Connection conn = persistencebroker.getConnection();   
  20.   
  21.  CallableStatement cst; // 可调用语句对象   
  22.   
  23.  // 准备可调用语句对象   
  24.   
  25.  cst = conn.prepareCall(strSQL);   
  26.   
  27.  // 设置输入参数   
  28.   
  29.  cst.setString(1, tablename);   
  30.   
  31.  // 登记输出参数   
  32.   
  33.  cst.registerOutParameter(2, java.sql.Types.VARCHAR);   
  34.   
  35.  // 执行该存储过程   
  36.   
  37.  cst.execute();   
  38.   
  39.  BNXmlUtil.setNodeValue(node,cst.getString(2));//设置节点值    
  40.   
  41.  return 1;   
  42.   
  43. }  

抱歉!评论已关闭.