三种方式调用mysql存储过程

三种方式调用mysql存储过程

📫 作者简介:「子非我鱼」,专注于研究全栈 🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

文章目录

引言示例一: 数据库直接创建使用存储过程示例二: java实现调用存储过程(JDBC方式)示例三: java实现调用存储过程(Mybatis方式)注意事项

引言

MySQL 存储过程是一组为了完成特定任务而组合在一起的 SQL 语句,可以通过 JDBC(Java Database Connectivity)来在 Java 中进行调用。以下是在 调用 MySQL 存储过程的示例:

示例一: 数据库直接创建使用存储过程

创建无参存储过程

DELIMITER $

CREATE PROCEDURE 名称()

BEGIN

逻辑语句(可以一条或多条)

END $

示例:

DELIMITER $

CREATE PROCEDURE setUsername()

BEGIN

update myqxin_user set username = '魅言倾馨' where id = 1;

END $

使用存储过程

call setUsername() // setUsername就是上面创建的名称

创建有参存储过程

DELIMITER $

CREATE PROCEDURE 名称(in 字段名 字段类型)

BEGIN

逻辑语句(可以一条或多条)

END $

示例

DELIMITER $

CREATE PROCEDURE setValueIsNotNull(in dateTime VARCHAR(32))

BEGIN

update lr_monitor_concentration_h set sulfur_dioxide = 0 where sulfur_dioxide is null and date_time like concat(dateTime, '%');

update lr_monitor_concentration_h set nitrite_ion = 0 where nitrite_ion is null and date_time like concat(dateTime, '%');

update lr_monitor_concentration_h set inhalable_particles = 0 where inhalable_particles is null and date_time like concat(dateTime, '%');

update lr_monitor_concentration_h set carbon_monoxide = 0 where carbon_monoxide is null and date_time like concat(dateTime, '%');

update lr_monitor_concentration_h set ozone = 0 where ozone is null and date_time like concat(dateTime, '%');

update lr_monitor_concentration_h set fine_particulate_matter = 0 where fine_particulate_matter is null and date_time like concat(dateTime, '%');

END $

使用存储过程

call setValueIsNotNull('2022-03-28');

示例二: java实现调用存储过程(JDBC方式)

public class StoredProcedureUtil {

private String url = "jdbc:mysql://test-fast-mysql.myqxin.com:3306/fast_isip_admin?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai";

private String username = "用户名";

private String password = "密码";

public Connection getConnection(){

// 数据库连接

Connection conn = null;

try {

// 加载数据库驱动,注册到驱动管理器

Class.forName("com.mysql.jdbc.Driver");

// 创建Connection链接

conn = DriverManager.getConnection(url,username,password);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e){

e.printStackTrace();

}

return conn;

}

public void implementStorage(String Storagename){

String result = "{call "+ Storagename.concat("()}");

Connection conn = getConnection();

try {

CallableStatement cs = conn.prepareCall(result);

cs.execute();

} catch (SQLException throwables) {

throwables.printStackTrace();

}

}

}

示例三: java实现调用存储过程(Mybatis方式)

这是Mapper.xml文件的使用方式

{call bcjs_clean}

注解方式

public interface LrMonitorConcentrationMapper extends BaseMapper {

@Select({"call setValueIsNotNull(#{format})"})

@Options(statementType = StatementType.CALLABLE)

void implementStorage(String format);

}

注意事项

确保 MySQL JDBC 驱动已经被正确导入到项目中。如果存储过程有输入参数,使用 setXXX() 方法设置参数值。如果存储过程有输出参数,使用 implementStorage() 方法注册输出参数,并在执行后使用 getXXX() 方法获取结果。

通过以上步骤,你可以成功在 Java 中调用 MySQL 存储过程。

相关推荐

流眄的意思、流眄的详细解释
365bet体育在线赌场

流眄的意思、流眄的详细解释

📅 07-24 👁️ 9680
9月1日 世界杯小组赛 多米尼加男篮vs约旦男篮 视频集锦
盘点特定情况下的界不如标!
365游戏注册

盘点特定情况下的界不如标!

📅 08-26 👁️ 7481
有些古代帝王死后,其灵柩需要放置几个月才下葬,他们不担心尸体会腐烂吗?
哔哩哔哩怎么评论作品?哔哩哔哩的评论在哪里看?2023-10-04 20:48:057409浏览
100幅国画狗,太哏儿了~(附教程)
365游戏注册

100幅国画狗,太哏儿了~(附教程)

📅 08-01 👁️ 876
打印机灯一直闪烁不能打印什么原因 5种方法教你解决
精准原创123656官方网

打印机灯一直闪烁不能打印什么原因 5种方法教你解决

📅 08-15 👁️ 3051
比利时队世界杯阵容身价:德布劳内8000万欧,库娃6000万
淘宝发布全新和二手该如何选择?
365游戏注册

淘宝发布全新和二手该如何选择?

📅 08-08 👁️ 1592