java中jdbc调用存储过程

     存储过程具有高效,安全,方便快捷等特点,一直深受广大编程者的喜爱,Jdbc也为我们提供了与存储过程打交道的通道。通过CallableStatement我们可以调用存储过程。

可以调用无参数,有输入参数和输出参数的存储过程。

  1.调用无参存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `SkusProc`()
BEGIN
  SELECT 
    skucode,
    skuname 
  FROM
    skus ;
  END
    
private static  Connection createCon()
	{
		
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} //classLoader,加载对应驱动
        try {
			conn = (Connection) DriverManager.getConnection(url, username, pwd);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        
		return conn;
	}

	//调用无参数存储过程
	public List<skus> GetNoParaSkuList()
	{
      List<skus> list=new ArrayList<skus>();
		
		conn=createCon();

		CallableStatement  cs=null;//使用CallableStatement调用存储过程
		try {
			  
		  cs=(CallableStatement) conn.prepareCall("CALL `SkusProc`");
			
			ResultSet resultSet=cs.executeQuery();
			
			while(resultSet.next())
			{
				skus sku=new skus();
				sku.setSkuCode(resultSet.getString("skucode"));
				sku.setSkuName(resultSet.getString("skuname"));
				list.add(sku);
			}
			cs.close();
			conn.close();
			
		
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		};
		
		return list;
		
	}

 2.调用有参存储过程

    有参存储过程包括输入参数和输出参数

   

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSkuCountProc`(IN categoryId INT, OUT count_num INT )
BEGIN  
            SELECT COUNT(0) INTO  count_num  FROM skus s INNER JOIN category  c ON s.categoryid=c.id
             WHERE c.Id=categoryId;
         END
 
	//调用有参数的存储过程
	public int GetParaSkuList(int categoryID)
	{

		conn=createCon();

		CallableStatement  cs=null;//使用CallableStatement调用存储过程
		try {
			  
		  cs=(CallableStatement) conn.prepareCall("CALL GetSkuCountProc(?,?)");
			
			cs.setInt(1,categoryID);
			cs.registerOutParameter(2, Types.INTEGER);//注册输出参数
			cs.execute();
		    int result=cs.getInt(2);//获取输出参数值
			cs.close();
			conn.close();
			return result;
		
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		};
		
		return 0;
		
	}
     如果有输出参数,我们要使用registerOutParameter进行注册。然后使用getInt获取返回值

  

	//调用无参数存储过程
	   List<skus> list=dao.GetNoParaSkuList();
		for(skus sku:list)
		{
			System.out.println(sku.getSkuCode()+"--"+sku.getSkuName());
			
		}
		
		//调用有参数存储过程
		int result=dao.GetParaSkuList(6);
		System.out.println(result);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值