• 使用CablleStatement调用存储过程


    /**

     * 使用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();

    }

    }

    }

  • 相关阅读:
    form表单提交target属性使用
    window.showModalDialog
    mybaits中date类型显示时分秒(orcle数据库)
    mybatis中in查询
    偷懒的inline-block解决方法
    10. python单元测试(一)
    9. Request & 爬虫
    8. 类与对象
    7. python异常处理&异常基类学习
    6. IO及文件操作
  • 原文地址:https://www.cnblogs.com/hello-liyb/p/7719559.html
Copyright © 2020-2023  润新知