MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程

http://blog.csdn.net/qq_26525215/article/details/52143733

在上面链接的博客中,写了如何用MySQL语句定义和执行存储过程

Java执行存储过程:

准备表stud:

列类型分别为:

varchar,varchar,int

image.png

定义的存储过程分别为:

p1:-无参

delimiter &&
create procedure p1()
begin
    insert into stud values('P100','小李',43);
    select * from stud;
end&&
delimiter ;

p2:-输入参数

delimiter &&
create procedure p2(in id varchar(32),in sname varchar(32),in age int)
begin
    insert into stud values(id,sname,age);
    select * from stud;
end &&
delimiter ;

p3:-输入输出参数:

delimiter &&
create procedure p3(in id varchar(32) ,in sname varchar(32),in age int ,out num int)
begin
    insert into stud values(id,sname,age);
    select * from stud;
    select count(*) into num from stud;
end&&
delimiter ;

Java演示执行不带参数的存储过程:

@Test
    public void callProcedureDemo() throws Exception{
        Connection con = ConnFactory.getConnection();
        String sql = "call p1()";
        CallableStatement cst = con.prepareCall(sql);
        ResultSet rs = cst.executeQuery();
        while(rs.next()){
            System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getInt(3));
        }
    }

演示结果:

image.png

Java演示执行带输入参数的存储过程:

构造 call 转义序列时,请使用 ?(问号)字符来指定 IN 参数。此字符充当要传递给该存储过程的参数值的占位符。

可以使用 SQLServerPreparedStatement 类的 setter 方法之一为参数指定值。可使用的 setter 方法由 IN 参数的数据类型决定。

向 setter 方法传递值时,不仅需要指定要在参数中使用的实际值,还必须指定参数在存储过程中的序数位置。例如,如果存储过程包含单个 IN 参数,则其序数值为 1。如果存储过程包含两个参数,则第一个序数值为 1,第二个序数值为 2。

@Test//带输入参数
    public void callProcedureDemo2() throws Exception{
        Connection con = ConnFactory.getConnection();
        String sql="call p2(?,?,?)";
        CallableStatement cst = con.prepareCall(sql);
        cst.setString(1, "P110");
        cst.setString(2, "段誉");
        cst.setInt(3, 43);
        ResultSet rs = cst.executeQuery();
        while(rs.next()){
            System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getInt(3));
        }
    }

演示结果:

image.png

Java演示执行带输入输出参数的存储过程:

构造 call 转义序列时,请使用 ?(问号)字符来指定 OUT 参数。

此字符充当要从该存储过程返回的参数值的占位符。

要为 OUT 参数指定值,必须在运行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定各参数的数据类型。

使用 registerOutParameter 方法为 OUT 参数指定的值必须是 java.sql.Types 所包含的 JDBC 数据类型之一,而它又被映射成本地 SQL Server 数据类型之一。有关 JDBC 和 SQL Server 数据类型的详细信息,请参阅了解 JDBC 驱动程序数据类型。

当您对于 OUT 参数向 registerOutParameter 方法传递一个值时,不仅必须指定要用于此参数的数据类型,而且必须在存储过程中指定此参数的序号位置或此参数的名称。例如,如果存储过程包含单个 OUT 参数,则其序数值为 1;如果存储过程包含两个参数,则第一个序数值为 1,第二个序数值为 2。

@Test//带输入输出参数-----第4个参数 是 输出参数
    public void callProcedureDemo3() throws Exception{
        Connection con = ConnFactory.getConnection();
        String sql = "call p3(?,?,?,?)";
        CallableStatement cst =con.prepareCall(sql);
        cst.setString(1, "P102");
        cst.setString(2, "小凯");
        cst.setInt(3, 23);
        //将指定序号位置的 OUT 参数注册为给定的JDBC 类型。
        cst.registerOutParameter(4, Types.INTEGER);
        cst.execute();
        //获取输出的参数
        int count = cst.getInt(4);
        System.out.println(count);
    }

image.png



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
67 0
|
23天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
41 4
SpringBoot入门(4) - 添加内存数据库H2
|
25天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
29 2
SpringBoot入门(4) - 添加内存数据库H2
|
18天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
59 13
|
12天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
32 4
|
20天前
|
存储 SQL NoSQL
|
26天前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
93 6
|
1月前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
113 2
|
1月前
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
52 3
|
1月前
|
存储 SQL 关系型数据库
MySQL 存储过程错误信息不打印在控制台
MySQL 存储过程错误信息不打印在控制台
61 1
下一篇
无影云桌面