网站设计师的岗位职责新闻热点大事件

张小明 2025/12/31 10:44:10
网站设计师的岗位职责,新闻热点大事件,网站开发如何查看请求体,怎么提交百度收录一、什么是存储过程#xff1f;1、存储过程的定义存储过程#xff08;Stored Procedure#xff09;是一组预编译并存储在 MySQL 服务器中的 SQL 语句集合#xff0c;可通过名称调用执行#xff0c;支持参数传递、流程控制#xff08;条件、循环#xff09;、异常处理等特…一、什么是存储过程1、存储过程的定义存储过程Stored Procedure是一组预编译并存储在 MySQL 服务器中的 SQL 语句集合可通过名称调用执行支持参数传递、流程控制条件、循环、异常处理等特性是数据库层面封装业务逻辑的核心工具。2、存储过程的特性特性说明预编译创建时编译调用时无需重复解析 / 优化执行效率更高封装性将复杂 SQL 逻辑封装为单个单元降低应用层代码复杂度可复用性一次创建多处调用减少重复开发安全性可通过权限控制仅允许调用存储过程不直接操作底层表支持参数输入IN、输出OUT、输入输出INOUT参数流程控制支持 IF、CASE、LOOP、WHILE、REPEAT 等编程逻辑事务支持可在存储过程中管理事务COMMIT/ROLLBACK3、如何构建存储过程-- 创建存储过程 delimiter $$ CREATE PROCEDURE 存储过程名([参数列表]) BEGIN -- 存储过程体SQL语句/流程控制逻辑 END $$ delimiter; -- 调用存储过程 CALL 存储过程名([参数列表]);4、案例使用存储过程向表中批量插入2000条数据1创建表t_users该表中包含主键ID值、用户名称、用户性别、用户账号、用户密码、用户生日、用户地址、用户联系方式。-- 创建表t_users CREATE TABLE IF NOT EXISTS t_users( uid INT AUTO_INCREMENT PRIMARY KEY COMMENT 主键ID值, uname VARCHAR(30) NOT NULL COMMENT 用户名称, ugender VARCHAR(10) NOT NULL COMMENT 用户性别, uaccount VARCHAR(9) NOT NULL COMMENT 用户账号, upassword VARCHAR(9) NOT NULL COMMENT 用户密码, ubirthday VARCHAR(50) NOT NULL COMMENT 用户生日, uaddress VARCHAR(100) NOT NULL COMMENT 用户地址, uphone CHAR(11) NOT NULL COMMENT 用户联系方式 );2创建存储过程p_users向表中批量插入2000条数据模拟生成姓名先在姓氏列表中随机生成一个姓氏再根据性别在各自的名字库中获取随机的名字再将二者组合生成完整的名字模拟生成账号可以采用随机数来做范围是[100000000,99999999);模拟生成账号可以采用随机数来做密码的范围是数字6位或9位;模拟生成地址这里采用的是江苏省和其包含的市进行随机的组合模拟生成生日格式为‘××××-××-××’模拟生成手机号码手机号码的范围为1000000000019999999999。-- 使用数据库的存储过程向表中批量存储2000条数据 delimiter $$ CREATE PROCEDURE p_users () BEGIN DECLARE i INT DEFAULT 1; -- 计数器 DECLARE user_name VARCHAR (30); -- 用户姓名 DECLARE user_gender VARCHAR (10); -- 用户性别 DECLARE user_account VARCHAR (9); -- 用户账号 DECLARE user_password VARCHAR (9); -- 用户密码 DECLARE user_birthday VARCHAR (50); -- 用户生日 DECLARE user_address VARCHAR (100); -- 用户地址 DECLARE user_phone CHAR(11); -- 用户电话号码 -- 随机生成数据 -- 创建姓氏列表变量 SET last_names 赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,田; -- 男性名字库 SET male_names 明轩,沐泽,宏杰,诚,栋盛,健,德清,明,柯鸿,学智,俊,国瑞,东旭,彦晟,哲源,旭磊,兵,海毅,轩俊,文锦,潇阳,明煦,恒文,昌瑞; -- 女性名字库 SET female_names 欣瑾,沐璇,涵淇,韶涵,悦琪,凌蕊,凝萱,子琪,惜筠,怡木,巧云,春燕,初柔,雨,翠花,妍茜,捷,语蓉,艺歆,岚菱,冰蕊,蝶静,雅依,思怡; -- 江苏省包含的市名字库 SET country_names 南京市,无锡市,徐州市,常州市,苏州市,南通市,连云港市,淮安市,盐城市,扬州市,镇江市,泰州市,宿迁市; -- 循环插入数据 REPEAT -- 随机生成用户性别 SET user_gender IF(RAND() 0.5, 男, 女); -- 随机生成用户姓名 -- 随机取出用户的性 SET last_name SUBSTRING_INDEX(SUBSTRING_INDEX(last_names, ,, FLOOR(RAND() * 21 1)), ,, - 1); -- 根据性别取名 IF user_gender 男 THEN SET first_name SUBSTRING_INDEX(SUBSTRING_INDEX(male_names, ,, FLOOR(RAND() * 24 1)), ,, - 1); ELSE SET first_name SUBSTRING_INDEX(SUBSTRING_INDEX(female_names, ,, FLOOR(RAND() * 24 1)), ,, - 1); END IF; -- 组合名字 SET user_name CONCAT(last_name, first_name); -- 随机生成账号账号的长度为9位范围100000000 -- 999999999 SET user_account FLOOR(RAND() * 900000000 100000000); -- 随机生成密码: 密码最少6位最多九位 SET user_password FLOOR(RAND() * 999900000 100000); -- 随机生成生日 SET month_random FLOOR(RAND() * 12 1); SET month_value IF(month_random 10, CONCAT(0, month_random), month_random); SET date_random FLOOR(RAND() * 30 1); SET date_value IF(date_random 10, CONCAT(0, date_random), date_random); SET user_birthday CONCAT(FLOOR(RAND() * 46 1980), -, month_value, -, date_value); -- 随机生成地址 -- 随机市名 SET country_name SUBSTRING_INDEX(SUBSTRING_INDEX(country_names, ,, FLOOR(RAND() * 13 1)), ,, - 1); -- 组合地址信息 SET user_address CONCAT(江苏省, country_name); -- 随机生成手机号码 10000000000-19999999999 SET user_phone FLOOR(RAND() * 1000000000 10000000000); INSERT INTO t_users (uname, ugender, uaccount, upassword, ubirthday, uaddress, uphone) VALUES (user_name, user_gender, user_account, user_password, user_birthday, user_address, user_phone); -- 计数器1 SET i i 1; UNTIL i 2000 END REPEAT; COMMIT; END $$ delimiter;3预编译存储过程调用存储过程-- 调用存储过程 CALL p_users();4成功生成2000条模拟数据二、java如何调用存储过程在上面调用存储过程的案例中我们已经成功生成2000条模拟数据那么下面以该表为例通过调用存储过程来实现查询用户名称的操作。1、创建存储过程p_demo3通过传入参数账号和密码信息获取该用户的名称-- 创建存储过程查询该账户的用户名称 delimiter $$ CREATE PROCEDURE p_demo3(IN v_account VARCHAR(9),IN v_password VARCHAR(9),OUT v_name VARCHAR(30)) BEGIN -- into关键字是给一个变量赋值如果产生多个值(2个及以上需要用游标) SELECT uname INTO v_name FROM t_users WHERE uaccount v_account AND upassword v_password; END $$ delimiter;2、调用存储过程以表中生成的第一条数据为例输入该用户的账号和密码。-- 调用存储过程 CALL p_demo3(634678362,223980837, uname); SELECT uname; -- 查询返回的结果结果截图3、通过上面两步已经通过存储过程实现了对用户姓名的查询下面在java中连接数据库调用存储过程。1在pom.xml文件中添加依赖dependencies !-- MySQL JDBC driver -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.28/version !-- 请使用最新版本 -- /dependency /dependencies2连接数据库代码import java.sql.*; import java.util.Scanner; public class Dao { //创建数据库连接对象 private Connection conn; public Dao(){ //加载数据库驱动 try { Class.forName(com.mysql.cj.jdbc.Driver); conn DriverManager.getConnection(jdbc:mysql://127.0.0.1:3306/computer_class,root,123456); System.out.println(数据库computer_class连接成功); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } } public void call(String account,String password){ //准备调用语句 String sql {call p_demo3(?,?,?)}; //预执行语句 try { CallableStatement cstmt this.conn.prepareCall(sql); //注册参数 cstmt.setString(1,account); cstmt.setString(2,password); //返回值类型 cstmt.registerOutParameter(3, Types.VARCHAR); //执行存储过程 cstmt.execute(); //获取返回结果 String str cstmt.getString(3); System.out.println(执行的结果为str); } catch (SQLException e) { throw new RuntimeException(e); } } public static void main(String[] args) { //创建scanner对象 Scanner sc new Scanner(System.in); //通过用户输入来获取用户的账号和密码信息 System.out.println(请输入账号); String account sc.nextLine(); System.out.println(请输入密码); String password sc.nextLine(); Dao db new Dao(); db.call(account,password); } }3在控制台中输入账号和密码信息以第一条数据为例*****4-1在上面的案例中调用的存储过程的返回值只有一行。如果出现多行数据的情况应该使用游标来获取返回的结果。下面介绍一个使用到游标的案例查询所有地址为江苏省南京市的用户名称、用户性别、地址信息示例代码-- 创建存储过程查询所有地址为江苏省南京市的用户名称、用户性别、地址信息 -- 返回的结果是有多行数据是一个结果集所以需要使用到游标 delimiter $$ CREATE PROCEDURE p_demo4(IN v_address VARCHAR(100),OUT v_data VARCHAR(15000)) BEGIN -- 声明变量 DECLARE user_name VARCHAR(30); DECLARE user_gender VARCHAR(10); DECLARE user_address VARCHAR(100); DECLARE v_str TEXT DEFAULT ; -- 声明游标遍历结束的标志变量必须是 BOOL/INT 类型默认 NULL DECLARE done INT DEFAULT 0; -- 游标的定义就是sql的定义 DECLARE v_result CURSOR FOR SELECT uname,ugender,uaddress FROM t_users WHERE uaddress v_address; -- 声明游标结束处理器 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done 1; -- 打开游标执行关联的查询加载结果集到内存 OPEN v_result; read_loop: LOOP -- 从游标中读取一行数据赋值给变量 FETCH v_result INTO user_name,user_gender,user_address; IF done 1 THEN LEAVE read_loop; END IF; -- 业务逻辑处理当前行的数据示例打印/计算/插入等 SET v_str CONCAT(v_str ,user_name, -, user_gender,-,user_address,|); END LOOP; -- 6. 关闭游标释放结果集内存 CLOSE v_result; -- 完成对返回值的赋值 SET v_data v_str; END $$ delimiter;4-2调用存储过程-- 调用存储过程 CALL p_demo4(江苏省南京市,info) SELECT info4-3运行结果截图三、什么是自定义函数1、自定义函数的定义自定义函数User-Defined FunctionUDF是 MySQL 中用户自行定义的、可复用的 SQL 函数与内置函数如CONCAT()、SUM()类似接收输入参数、执行逻辑并返回单个值标量是数据库层封装简单 / 复用性高的计算逻辑的核心工具。2、自定义函数的特性特性说明返回值必须返回单个值标量无返回值则报错调用方式可嵌入 SQL 语句中如 SELECT、WHERE使用场景简单计算、数据转换、条件判断单值输出语法限制不能包含事务操作COMMIT/ROLLBACK3、如何构建自定义函数CREATE FUNCTION 函数名参数列表 DETERMINISTIC BEGIN -- 执行的函数体 RETURN 返回值; END;4、案例使用自定义函数通过输入的账号和密码来实现登录功能数据来源于上面案例创建的表。1构建自定义函数f_loginCREATE FUNCTION f_login(v_account VARCHAR(9), v_passsword VARCHAR(9)) RETURNS VARCHAR(50) DETERMINISTIC BEGIN -- 声明计数器 DECLARE v_count INT; -- 声明返回信息、 DECLARE v_message VARCHAR(50); -- 根据输入的账号和密码查表 SELECT COUNT(*) INTO v_count FROM t_users WHERE uaccount v_account AND upassword v_passsword; SET v_message IF(v_count 0,登录成功,登录失败账号或密码错误); RETURN v_message; END;2通过预编译后调用自定义函数f_login以第一条数据为例。-- 调用自定义函数 SELECT f_login(634678362,223980837) FROM DUAL;3返回结果截图四、java如何调用自定义函数1示例代码import java.sql.*; public class UDFCall { //创建数据库连接对象 private Connection conn; public UDFCall(){ //加载数据库驱动 try { Class.forName(com.mysql.cj.jdbc.Driver); conn DriverManager.getConnection(jdbc:mysql://127.0.0.1:3306/computer_class,root,123456); System.out.println(数据库computer_class连接成功); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } } public void callfunc (String account,String password){ //准备调用语句 String sql { ? call f_login(?,?)}; //预执行语句 try { CallableStatement cstmt this.conn.prepareCall(sql); //返回值类型 cstmt.registerOutParameter(1, Types.VARCHAR); //注册参数 cstmt.setString(2,account); cstmt.setString(3,password); //执行存储过程 cstmt.execute(); //获取返回结果 String str cstmt.getString(1); System.out.println(登录的结果为str); } catch (SQLException e) { throw new RuntimeException(e); } } public static void main(String[] args) { //创建实例对象 UDFCall udf new UDFCall(); udf.callfunc(634678362, 223980837); } }2运行结果截图五、MySQL数据库的存储过程和自定义函数的区别对比维度存储过程Stored Procedure自定义函数UDF核心定位封装多步业务逻辑如事务、多表操作封装单值计算逻辑如数据转换、简单运算返回值规则支持无返回值、单个返回值、多个返回值仅能返回一个值标量如 INT/VARCHAR调用方式独立调用CALL 过程名(参数)不可嵌入 SQL嵌入调用可直接嵌入 SELECT/WHERE/ORDER BY 等 SQL 语句也可单独调用参数类型支持 IN/OUT/INOUT 三种参数显式声明仅支持 IN 参数默认不可声明 OUT/INOUT事务支持完全支持可包含 COMMIT/ROLLBACK 管理事务完全不支持禁止包含事务操作执行会报错使用场景复杂业务逻辑订单创建、数据同步、批量更新简单计算逻辑时间转换、积分计算、字符串处理SQL 嵌入性不可嵌入 SELECT/UPDATE 等语句仅能独立 CALL可嵌入任意 SQL 语句如SELECT UDF(字段) FROM 表语法限制可包含 DDLCREATE/DROP、DML、DQL避免包含 DDL仅建议 DQL读取数据或纯内存计算异常处理支持 DECLARE HANDLER 捕获异常可回滚事务支持捕获异常但仅能返回默认值 / 抛自定义异常
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

广州顶正餐饮培训学校郑州网站seo费用

AutoGPT任务进度可视化工具推荐:让执行过程更透明可控 在智能体(Agent)系统逐渐从“对话助手”演进为“数字员工”的今天,一个核心挑战浮出水面:我们如何信任一个看不见其思考路径的AI?当AutoGPT花了一整天…

张小明 2025/12/30 0:42:17 网站建设

秋莱网站建设网站购物车作用

数学与语言特性编程问题解析 1. 计算圆周率 π 的值 计算圆周率 π 的一个合适方法是使用蒙特卡罗模拟。蒙特卡罗模拟是一种利用随机输入样本来探索复杂过程或系统行为的方法,广泛应用于物理、工程、计算、金融、商业等多个领域。 我们基于以下思路进行计算:直径为 d 的圆的…

张小明 2025/12/30 0:42:14 网站建设

焦作建设厅网站电商业务推广

GPT-SoVITS离线部署企业级语音系统实战方案 在金融、医疗、政务等对数据安全要求极高的行业,越来越多企业开始构建私有化语音交互系统。然而传统TTS技术面临两大难题:一是需要数小时高质量录音才能训练出可用模型,成本高昂;二是依…

张小明 2025/12/30 4:03:20 网站建设

好大夫王建设在线个人网站长沙网站推广

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

张小明 2025/12/30 4:03:18 网站建设

网站制作风格类型北京网站seo优化排名

如何用Subtitle Edit高效管理视频字幕工作流 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 当你面对繁杂的视频字幕编辑任务时,是否曾感到无从下手?无论是影视翻译、视频制作…

张小明 2025/12/30 4:03:15 网站建设