java中调用存储过程实例

本类的属性是通过依赖注入完成的(由spring管理)

 

public boolean GET_BYQ_LIST(UeiByq entity) throws Exception {
  /**
   * 数据库连接
   */
  Connection sybaseConn = null;
  /**
   * CallableStatement  它的父类:PreparedStatement-->Statement
   */
  CallableStatement cs = null;
  /**
   * 结果集
   */
  ResultSet rs = null;

  try {
   sybaseConn = this.KMRPM.getSybDS().getConnection();  //获得Connection--数据库连接对象
   /**
    * 创建statement  红色的问号表示返回的结果集(必须注册参数类型为out类型);黄色的表示传入的in类型参数
    */
   cs = sybaseConn.prepareCall("{? = call PKG_MRS.GET_BYQ_LIST(?,?,?,?,?)}");
   
   // 注册输出对象 (必须注册参数类型为out类型)
   int n_Index = 1;
   cs.registerOutParameter(n_Index++, OracleTypes.CURSOR);
   // 设置存储过程参数
   cs.setString(n_Index++, entity.getKHMC());设值的时候,实体类属性的类型要使用对应于数据库中的类型的方法
   cs.setString(n_Index++, entity.getKHBH());
   cs.setString(n_Index++, null);
   cs.setString(n_Index++, null);
   cs.setString(n_Index++, null);
   // 执行
   cs.execute();
   /**
    * rs = ((OracleCallableStatement) stmt).getCursor(1);
    * 此写如果用数据源连接方式,发会报stmt转化为OracleCallableStatement java.lang.ClassCastException异常
    * 如果直连是没有问题的
    */
   //取回结果集
   rs = (ResultSet)cs.getObject(1);
   

   importByq(null,rs);
   
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   throw e;
  } finally {
   /**
    * 释放资源
    */
   ConnectionFactory.releaseConnection(sybaseConn, cs, rs);
  }
  
 }

 
 private int  importByq(WebApplicationContext springContext,ResultSet sybaseRs){
  //定义 存放sql语句的 StringBuffer
     StringBuffer sbSQL = null ;
     //定义 PreparedStatement
     PreparedStatement ps = null ;
     PreparedStatement delPs = null ;
     //定义数据库连接
     Connection conn = null ;
     int  count = 0;
  try {
   
   conn = KMRPM.getOraDS().getConnection();
   
   //拼写sql
      sbSQL = new StringBuffer();
   sbSQL.append( "INSERT INTO UEI_BYQ " );
   sbSQL.append( "(KHBH,KHMC,BH,MC) " );
   sbSQL.append( "VALUES " );
   sbSQL.append( "(?,?,?,?)" );
   
   
   /**
    * 获取连接  不能使用自动提交机制;因为下面是批量插入
    */
   
   conn.setAutoCommit(true);
   
   /**
    * 删除旧数据 UEI_BYQ 相当于一个临时表,专门用来存储按照客户输入的条件统计出来的数据
    */
   delPs = conn.prepareStatement("DELETE UEI_BYQ ");
   
   delPs.executeUpdate();
   
   /**
    * 导入新数据
    */
   //获取数据库PrepatedStatement
   ps = conn.prepareStatement( sbSQL.toString() );
   /**
    * 循环SYBASE RS导数据
    */
   
   while (sybaseRs.next()) {
    count++;
    //给sql语句赋值
             //定义增量参数变量
    try{
     int nIndex = 1 ;
     ps.setString( nIndex++ , sybaseRs.getString("KHBH") ==null?"":sybaseRs.getString("KHBH").trim());
     ps.setString( nIndex++ , sybaseRs.getString("KHMC") ==null?"":sybaseRs.getString("KHMC").trim());
     ps.setString( nIndex++ , sybaseRs.getString("BH") ==null?"":sybaseRs.getString("BH").trim());
     ps.setString( nIndex++ , sybaseRs.getString("MC")==null?"":sybaseRs.getString("MC").trim());
     ps.executeUpdate();
     
    }catch(Exception e){
     e.printStackTrace();
    }
    
    
   }
   
   /**
    * 提交事务
    */
   conn.commit();
   
  } catch (Exception e) {
   e.printStackTrace();
   try {
    
   } catch (Exception ie) {
    ie.printStackTrace();
   }
  }finally{
   /**
    * 释放资源
    */
   ConnectionFactory.releaseConnection(conn,ps,null);
   ConnectionFactory.releaseConnection(conn,delPs,null);
  }
  return count;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值