JDBC调用存储过程

来源:互联网 发布:电脑拍摄软件 编辑:程序博客网 时间:2024/05/16 10:23
package gz.itcast.d_callable;import gz.itcast.util.JdbcUtil;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.ResultSet;import org.junit.Test;/** * 使用CablleStatement调用存储过程 * @author APPle * */public class Demo1 {/** * 调用带有输入参数的存储过程 * CALL pro_findById(4); */@Testpublic void test1(){Connection conn = null;CallableStatement stmt = null;ResultSet rs = null;try {//获取连接conn = JdbcUtil.getConnection();//准备sqlString 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); */@Testpublic void test2(){Connection conn = null;CallableStatement stmt = null;ResultSet rs = null;try {//获取连接conn = JdbcUtil.getConnection();//准备sqlString 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);}}}

0 0