博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用CablleStatement调用存储过程
阅读量:5160 次
发布时间:2019-06-13

本文共 2314 字,大约阅读时间需要 7 分钟。

/**

 * 使用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

你可能感兴趣的文章
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>