java程序调用存储过程得到新增加记录的id号的方法

关于ms sql server2000的存储过程,主要作用是在表test中插入一条记录,然后得到新增加记录的id号。

test表三个字段:
ID:自动增长
yhm:用户名 字符串类型
kl: 密码   字符串类型

请问在java程序中如何调用这个存储过程才能实现,得到新增加记录的id号


存储过程如下:
CREATE PROCEDURE yh_insert

@yhm varchar(50),@kl varchar(50)

AS

begin

 

set nocount on

 insert into test(yhm,kl) values(@yhm,@kl)

set nocount off

select newid=@@identity

end

GO

 

解决办法:

在查询分析器中执行sp的方法
declare @id int
exec sp_yh_insert 'tetstst','111111',@id output
select @id


修改sp如下:使用输出参数来存储得到的新的Id

CREATE PROCEDURE sp_yh_insert

@yhm varchar(50),@kl varchar(50),@id int  output

AS

begin


set nocount on

 insert into test(yhm,kl) values(@yhm,@kl)

set nocount off

--select newid=@@identity

select @id=@@identity --关键


end
GO

java程序如下:

public String call_sp_insert_jh(String yhm,String kl)throws Exception
 {
    String strFlag = "";
    String strString = "";
    Connection conn = null;


    try
      {

        conn = db.getConnection();

        //CallableStatement proc = conn.prepareCall(strSql);

        CallableStatement   proc=conn.prepareCall("{call sp_yh_insert(?,?,?)}");

        proc.setString(1, "往往外饿饿饿额");  //给第一个输入参数赋值
        proc.setString(2, "1111111");  //给第2个输入参数赋值
        proc.registerOutParameter(3,Types.INTEGER);  //处理输出参数
        proc.execute(); //执行sp
        int id = proc.getInt(3);//得到返回值的值
        strString=Integer.toString(id);
        strFlag=strString ;


      }
    catch (SQLException e)
      {
          System.out.println("proc execute error"+strString);
       }
    finally
      {
          //关闭数据库联接
          try
            {
            conn.close();
            }
         catch(Exception sqle)
           {
           //产生新 异常,则抛出新 程序异常
           //throw new Exception("[DBBean.executeQuery(sql,tname)]","10");
            System.out.println("出错了");
           }
       }


    return strFlag;
 }

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值