java中jdbc调用存储过程

来源:互联网 发布:河南焦作诊所软件 编辑:程序博客网 时间:2024/06/04 23:29

     存储过程具有高效,安全,方便快捷等特点,一直深受广大编程者的喜爱,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 blocke.printStackTrace();} //classLoader,加载对应驱动        try {conn = (Connection) DriverManager.getConnection(url, username, pwd);} catch (SQLException e) {// TODO Auto-generated catch blocke.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 blocke.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 blocke.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 0