使用CallableStatement执行存储过程

使用CallableStatement执行存储过程
   
   
  1. package com.cn.callableStatement;
  2. import java.sql.CallableStatement;
  3. import java.sql.Connection;
  4. import java.sql.ResultSet;
  5. import org.junit.Test;
  6. import com.cn.Util.JdbcUtil;
  7. /***
  8. * 使用CallableStatement调用存储过程
  9. * @author liuzhiyong
  10. *
  11. */
  12. public class Demo1 {
  13. private Connection conn;
  14. private CallableStatement cstmt;
  15. /**
  16. * 使用CallableStatement调用带输入参数的存储过程
  17. */
  18. @Test
  19. public void test1(){
  20. Connection conn = null;
  21. CallableStatement cstmt = null;
  22. ResultSet rs = null;
  23. try{
  24. // 获取连接
  25. conn = JdbcUtil.getConnection();
  26. //准备sql
  27. String sql = "CALL pro_findById(?)";
  28. //预编译
  29. cstmt = conn.prepareCall(sql);
  30. //设置参数
  31. cstmt.setInt(1, 2);
  32. //发送参数,执行sql
  33. rs = cstmt.executeQuery();//注意:所有调用存储过程的sql语句都是使用executeQuery方法执行。
  34. //遍历结果集
  35. while(rs.next()){
  36. System.out.println(rs.getInt("id") + "#" + rs.getString("name") + "#" + rs.getString("password"));//这里的 getXXX()方法是获取结果集中的结果
  37. }
  38. }catch(Exception e){
  39. e.printStackTrace();
  40. throw new RuntimeException(e);
  41. }finally{
  42. JdbcUtil.close(conn, cstmt, rs);
  43. }
  44. }
  45. /**
  46. * 使用CallableStatement调用带输入参数输出参数的存储过程
  47. */
  48. @Test
  49. public void test2(){
  50. Connection conn = null;
  51. CallableStatement cstmt = null;
  52. ResultSet rs = null;
  53. try{
  54. // 获取连接
  55. conn = JdbcUtil.getConnection();
  56. //准备sql
  57. String sql = "CALL pro_getNameById(?,?)";
  58. //预编译
  59. cstmt = conn.prepareCall(sql);
  60. //设置输入参数
  61. cstmt.setInt(1, 2);
  62. /**
  63. * 设置输出参数(注册输出参数)
  64. * 参数一:参数位置
  65. * 参数二:存错过程中的输出参数的jdbc类型 varchar(20)
  66. */
  67. cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
  68. //发送参数,执行sql
  69. cstmt.executeQuery();//这里没有结果集返回。结果不是返回到结果集中,而是返回到输出参数中。注意:所有调用存储过程的sql语句都是使用executeQuery方法执行。
  70. /**
  71. * 得到输出参数的值
  72. * 索引值:预编译sql中的输出参数的位置
  73. */
  74. String result = cstmt.getString(2);//这里的getXXXX()方法是专门用于获取存储过程中的输出参数
  75. System.out.println(result);
  76. }catch(Exception e){
  77. e.printStackTrace();
  78. throw new RuntimeException(e);
  79. }finally{
  80. JdbcUtil.close(conn, cstmt, rs);
  81. }
  82. }
  83. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值