Java中执行存储过程(2)

2019-08-31 22:11

}

}

ResultSet rs=cs.executeQuery();//执行并返回结果集 while(rs.next()){//循环读取逐行

System.out.print(rs.getString(2)+\); }

DBHelper.closeAll(co, cs, rs);

执行之后,控制台会输出Tom

需要注意的是:获取CallableStatement对象方法不变,需要更改的是co.prepareCall(String arg0)方法中的参数,更改为“{call 存储过程名 (?)}“ 。其中存储过程参数放在存储过程名字之后的()之中,?指代参数,有几个参数就需要在()中添加几个 ?. (这里字符串类型不需要加单引号), 相当于占位符..然后需要使用cs.setObject(Object o), 根据参数类型调用相应的set方法. ..接下来一样,这里不多做解释…

3. 无参有返:

创建无参有返的存储过程如下: createprocproc_updateAge as begin

updatestudentInfosetstuAge=21 wherestuAge=20 return 100 end

执行上面的存储过程示例代码:

publicstaticvoid main(String[] args) throws Exception { Connection co=DBHelper.getCon();//获取链接对象

CallableStatement cs=co.prepareCall(\proc_updateAge}\);//通过连接获取CallableStatement对象

cs.registerOutParameter(1, java.sql.Types.INTEGER);//注册参数为传出或者返回类型参数Int类型 cs.execute();//执行

int result=cs.getInt(1);//获取参数 DBHelper.closeAll(co, cs, null); System.out.println(result);//输出 }

需要注意的是:获取CallableStatement对象方法不变,需要更改的是co.prepareCall(String arg0)方法中的参数,更改为“{?=call 存储过程名}“ . 然后使用cs.registerOutParameter(int paramIndex,sqlType); 方法注册参数,第一个参数为需要注册参数的下标(从1开始), 第二个为注册的类型, 不是java中的数据类型,而是sql的数据类型, 可以使用java.sql.Types.类型 方法类生命sql中的类型… 获取返回值,在调用cs对象的执行方法之后, 使用get方法 即可接受到返回值.

控制台输出100

4. 有参有返:

上面已经讲了有参无返,无参有返的调用方法, 那么举一反三很简单就可以想到有参有返如何执行了, 我还是写一下吧.

存储过程

createprocproc_deleteStuByName @namevarchar(20) as

begin

deletefromstudentInfowherestuName=@name return 100 end

java执行此存储过程:

//测试类

publicclass Test {

publicstaticvoid main(String[] args) throws Exception { Connection co=DBHelper.getCon();//获取链接对象 CallableStatement cs=co.prepareCall(\

proc_deleteStuByName (?)}\);//通过连接获取CallableStatement对象 cs.registerOutParameter(1, java.sql.Types.INTEGER);//注册参数为传出或者返回类型参数Int类型 cs.setString(2, \); cs.execute();//执行

int result=cs.getInt(1);//获取参数 DBHelper.closeAll(co, cs, null); System.out.println(result);//输出 } }

关于实现过程,就不在解释,需要注意的是:只有传出参数或者return才需要registerOutParameter()注册参数, 其余的为普通参数, 直接使用set方法就可为参数赋值, 参数下标索引, 从1开始, 从左往右一次增长…

5. 带有传出参数的存储过程:

看到这里, 相信你已经基本上可以猜到如何使用带有传出参数的存储过程了, 对的, 就是使用registerOutParameter()方法

存储过程代码:

createprocproc_deleteStuByNameAndGetParam @namevarchar(20),

@stuNamevarchar(20) out put as begin

deletefromstudentInfowherestuName=@name

select@stuName=stuNamefromstudentInfowherestuId=1 end

java执行此存储过程:

//测试类

publicclass Test {

publicstaticvoid main(String[] args) throws Exception { Connection co=DBHelper.getCon();//获取链接对象 CallableStatement cs=co.prepareCall(\proc_deleteStuByNameAndGetParam (?,?)}\);//通过连接获取CallableStatement对象

cs.setString(1, \);

cs.registerOutParameter(2, java.sql.Types.VARCHAR);//注册参数为传出或者返回类型参数Int类型 cs.execute();//执行

String result=cs.getString(2);//获取参数 DBHelper.closeAll(co, cs, null); System.out.println(result);//输出 } }

关于实现过程,需要解释吗?

总结:

1. 执行存储过程是使用CallableStatement接口的对象

2. 使用Connection对象的prepareCall(“{call 存储过程名 (参数) }”)方法方法指定存储过程,并返回CallableStatement的一个对象.

3. 参数下标从1开始, 由左往右增长,可是使用?方式声明参数, 使用set方法给参数赋值

4. 如果存储过程中有return或者传出参数时候, 需要明确使用CallableStatement对象的registerOutParameter(参数下标,sql类型)注册参数. ”

最后.

祝大家学习愉快. 工作生活顺利!


Java中执行存储过程(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:语文考试要点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: