欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过jdbc调用存储过程 博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 

程序员文章站 2024-03-23 11:01:40
...
     有进要通过jdbc调用存储过程,来说一下怎样来实现?
 在我见过的有两种情况:
         1)返回一个结果集(ResultSet)。
  2)返回一个特定的值。
 下面来详细的说明。
 1)返回一个结果集(ResultSet),这种类似通常的处理结果集
    如果事先就有一个类似如下的procedure
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 CREATE PROCEDURE getShipQuantity @jsid int  AS
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
SELECT jf_js_id,SUM(jf_ship_quantity) AS shipqty 
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
FROM tjobsheet_finish f WHERE (jf_js_id=@jsid)
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
GROUP BY jf_js_id
              那么我们将通过如下的代码来调用
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2   String sql = "{ call getShipQuantity(?) }";
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2          Connection con 
= getSession().connection();//通过hibernate得到的连接
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2          ResultSet  rs 
= null;
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2         BigDecimal shipQuantity 
= new BigDecimal(0);
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2         
try通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 {
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2              CallableStatement cs 
= con.prepareCall(sql);
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2             cs.setInt(1,jsoId);//设置输入参数
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2             rs 
= cs.executeQuery();//返回结果集
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2             
if(rs.next())通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 {
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2                      shipQuantity 
= new BigDecimal(rs.getDouble(2));
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2             }

通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2             logger.debug(
"shipQuantity --------------------- "+shipQuantity);
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2         }
catch(Exception e)通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 {
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2             logger.debug(e);
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2         }

      2)返回一个特定的值。也就是说,在procedure的定义中已经用output输出参数了。请看下面的proceduer
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 create procedure getSingleWgt @@singleWgt numeric(8,3) output,@jsnum varchar(11= '0000-0480'
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
as
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
declare @stwgt numeric(8,3)
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
select  @stwgt = sum(b.stwgt)
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
from js as a
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
inner join jsactdtl as b 
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
on a.jsnum = b.jsnum
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
where a.completion = 1 
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
and b.stflag = 22
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
and a.jsnum = @jsnum
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
select @@singleWgt = (@stwgt/orderedqty)  from js where jsnum = @jsnum

        那么我们将通过如下的代码来调用
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 String sql = "{ call getSingleWgt(?,?) }";
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 Connection con 
= getSession().connection();//得到connection
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
try通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 {
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2      CallableStatement cs 
= con.prepareCall(sql);//通过它来执行sql
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
    cs.registerOutParameter(1,java.sql.Types.FLOAT);//注册输出参数
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
    cs.setString(2,shipment.getJsnum());//指出输入参数
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
    
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2     
if(cs.execute())通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 {//执行
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
    float output = cs.getFloat(1);//返回值        
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 
    }

通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 }
catch(Exception e)通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 {
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2     logger.debug(e);
通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2 }

通过jdbc调用存储过程
            
    
    博客分类: Jdbc JDBCSQLSQL ServerOracleDB2