/**

* 使用CablleStatement调用存储过程

* @author APPle

*

*/

public class Demo1 {

/**

* 调用带有输入参数的存储过程

* CALL pro_findById(4);

*/

@Test

public void test1(){

Connection conn = null;

CallableStatement stmt = null;

ResultSet rs = null;

try {

//获取连接

conn = JdbcUtil.getConnection();

//准备sql

String sql = "CALL pro_findById(?)"; //可以执行预编译的sql

//预编译

stmt = conn.prepareCall(sql);

//设置输入参数

stmt.setInt(1, 6);

//发送参数

rs = stmt.executeQuery(); //注意: 所有调用存储过程的sql语句都是使用executeQuery方法执行!!!

//遍历结果

while(rs.next()){

int id = rs.getInt("id");

String name = rs.getString("name");

String gender = rs.getString("gender");

System.out.println(id+","+name+","+gender);

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

} finally {

JdbcUtil.close(conn, stmt ,rs);

}

}

/**

* 执行带有输出参数的存储过程

* CALL pro_findById2(5,@NAME);

*/

@Test

public void test2(){

Connection conn = null;

CallableStatement stmt = null;

ResultSet rs = null;

try {

//获取连接

conn = JdbcUtil.getConnection();

//准备sql

String sql = "CALL pro_findById2(?,?)"; //第一个?是输入参数,第二个?是输出参数

//预编译

stmt = conn.prepareCall(sql);

//设置输入参数

stmt.setInt(1, 6);

//设置输出参数(注册输出参数)

/**

* 参数一: 参数位置

* 参数二: 存储过程中的输出参数的jdbc类型    VARCHAR(20)

*/

stmt.registerOutParameter(2, java.sql.Types.VARCHAR);

//发送参数,执行

stmt.executeQuery(); //结果不是返回到结果集中,而是返回到输出参数中

//得到输出参数的值

/**

* 索引值: 预编译sql中的输出参数的位置

*/

String result = stmt.getString(2); //getXX方法专门用于获取存储过程中的输出参数

System.out.println(result);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

} finally {

JdbcUtil.close(conn, stmt ,rs);

}

}

}

-- 存储过程

-- 定义分隔符

DELIMITER $$

CREATE PROCEDURE proc_login()

BEGIN

SELECT * FROM admin;

END $$

-- 调用

CALL proc_login;

public class App_call {

// 全局参数

private Connection con;

private Statement stmt;

private PreparedStatement pstmt;

private CallableStatement cstmt;  // 存储过程

private ResultSet rs;

// 程序中调用存储过程

@Test

public void testCall() throws Exception {

try {

//1 . 创建连接

con = JdbcUtil.getConnection();

//2.  创建执行存储过程的stmt对象

CallableStatement cstmt = con.prepareCall("CALL proc_login");

//3.  执行(存储过程)

rs = cstmt.executeQuery();

// 遍历结果,测试

if (rs.next()) {

String name = rs.getString("userName");

String pwd = rs.getString("pwd");

// 测试

System.out.println(name + pwd);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

转载于:https://www.cnblogs.com/hello-liyb/p/7719559.html

使用CablleStatement调用存储过程相关推荐

  1. 水晶报表调用存储过程的问题

    前言:现在碰到了水晶报表调用存储过程的问题,问题是这样的:ERP软件里有很多的数据表,有些报表的字段要从多个数据表里取数据,并且要对数据进行处理,来作为报表的字段,我看了些资料,说可以通过存储过程来取 ...

  2. ASP调用存储过程返回了一个参数和一个记录集时出现ADODB.Recordset 错误 '800a0e78'...

    在测试服务器上给sql server2005 打上了sp3补丁,发现有一个调用存储过程的页面报错 ADODB.Recordset 错误 '800a0e78' 对象关闭时,不允许操作. 以为是sp3的缘 ...

  3. jdbcTemplate 调用存储过程。 入参 array 返回 cursor

    注:本文来源<  jdbcTemplate 调用存储过程. 入参 array 返回 cursor   > 需求: java传入一个list object.从数据库找到相关的数据并返回. 如 ...

  4. 调用存储过程时报错:There is no ‘username’@'host’ registered

    作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 调用存储过程时,碰到错误,大致信息如下: error 1449 ...

  5. MyBatis入门学习教程-调用存储过程

    一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_ ...

  6. PreparedStatement和CallableStatement都可以调用存储过程

    2019独角兽企业重金招聘Python工程师标准>>> 他们都可以调用存储过程,上午收了下主要区别.但是等于放屁,说了一大推也没说个所以然,就看见了这一句,说是CallableSta ...

  7. oracle创建函数和调用存储过程和调用函数的例子(区别)

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  8. c efcore.mysql_EF Core在mysql中调用存储过程

    EF Core在mysql中调用存储过程,博主找了很多,然而大多都是EF Core+SqlServer的或者EF Core+Oracle的,并没有正对Mysql的Pomelo驱动的,所以查找了一些资料 ...

  9. Oracle 触发器调用存储过程|转||待研究|

    Oracle触发器调用存储过程资料收集整理 触发器:Trigger 存储过程:Stored Procedure // ******************** 收集1 **************** ...

最新文章

  1. App自动化元素定位不到?别慌,3大工具帮你解决
  2. ROS学习(四):安装 MoveIt!
  3. 新手福利:Apache Spark 入门攻略
  4. 【Asp.net】Session对象
  5. u-boot与bootloader及其区别
  6. vue 开发中element-ui库的switch开关绑定number类型数据不成功问题 解决方法
  7. hdu 1251 字典树,指针版
  8. swift4.0闭包
  9. 网络是怎样连接起来的
  10. 阎王爷:别总写代码,这130个网站比涨工资都重要!(建议收藏)
  11. SD卡、SDHC卡和SDXC卡的功能及区别
  12. java的弱引用_理解Java中的弱引用(Weak Reference)
  13. 最新版 IDEA 2022.1 正式上线 各种新操作...新功能...都在这里啦
  14. 如何用PS的样式制作图片椭圆形边框
  15. Oracle带where的查询语句
  16. 使用树莓派连接笔记本热点
  17. 【Mybatis】一个Mybatis程序
  18. npm ERR! code E404 npm ERR! 404 no such package available : xxx
  19. networkx读取gml文件失败
  20. 二叉树,由先序序列和中序序列建树 / 满(真)二叉树由先序序列和后序序列建树

热门文章

  1. python 数据格式转换_python常用数据格式转换
  2. linux系统为什么很重要,为什么Linux系统始终取代不了Windows?这4个原因80%的人不知道!...
  3. opencv画线和文字
  4. android文件搜索广播,Android 实现无网络传输文件
  5. maya为什么不能导出fbx_Maya在操作中最容易出现的几个问题,现在注意还来得及...
  6. python命令解析_python学习(命令行的解析)
  7. 值得收藏的Redis基础总结
  8. voc数据集的map计算方式
  9. 基本Linux命令的用法
  10. thinkphp-page