mysql preparedstatement 执行存储过程_JDBC系列:(4)使用CablleStatement调用存储过程...

执行sql语句的接口接口作用Statement接口用于执行静态的sql语句

PreparedStatement接口用于执行预编译sql语句

CallableStatement接口用于执行存储过程的sql语句(call xxx)

package com.rk.db.d_callable;

import java.sql.Connection;

import java.sql.CallableStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import com.rk.db.utils.JDBCUtil;

/**

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

* @author RK

*

*/

public class Demo01

{

public static void main(String[] args)

{

Connection conn = null;

CallableStatement cstmt = null;

ResultSet rs = null;

try

{

//获取连接

conn = JDBCUtil.getConnection();

//准备sql

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

//预编译

cstmt = conn.prepareCall(sql);

//设置输入参数

cstmt.setInt(1, 3);

//发送参数

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

//遍历结果

while(rs.next())

{

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

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

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

System.out.println(id + "\t" + userName + "\t" + pwd);

}

}

catch (SQLException e)

{

e.printStackTrace();

}

finally

{

JDBCUtil.close(conn, cstmt, rs);

}

}

}

package com.rk.db.d_callable;

import java.sql.Connection;

import java.sql.CallableStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import com.rk.db.utils.JDBCUtil;

/**

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

* CALL pro_findById2(5,@NAME);

* @author RK

*

*/

public class Demo02

{

public static void main(String[] args)

{

Connection conn = null;

CallableStatement cstmt = null;

ResultSet rs = null;

try

{

//获取连接

conn = JDBCUtil.getConnection();

//准备sql

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

//预编译

cstmt = conn.prepareCall(sql);

//设置输入参数

cstmt.setInt(1, 3);

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

/**

* 参数一: 参数位置

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

*/

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

//发送参数,执行结果不是返回到结果集中,而是返回到输出参数中

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

//得到输出参数的值

/**

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

*/

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

System.out.println(result);

}

catch (SQLException e)

{

e.printStackTrace();

}

finally

{

JDBCUtil.close(conn, cstmt, rs);

}

}

}

381ca4abdc121897fdc2857db3e83635.png

3fed923f1a3c22f5acc883939b846dc3.png

94494385c7e8bcbf7796fb9714d66a8b.png

4161671fbc56876d215b848263511984.png

e2767a76fc03dd6f07d02274a847ff75.png

7a383574dea05e473b183e983a8e7e2b.png

70b745cb19f16f244c64f40c2972aa0d.png

91fe1793299e0d5868d1b6dd27c6eda3.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值