博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
存储过程处理MySQL中的URL地址,给其加上前缀
阅读量:6829 次
发布时间:2019-06-26

本文共 2060 字,大约阅读时间需要 6 分钟。

hot3.png

现在遇到一个问题,MySQL数据库中有个images字段,用于存取文章中所有图片地址,有些地址是基于服务器的绝对路径,例如/watercms/upload/image/20160204/1454573950573007716.jpg,/watercms/upload/image/20160204/1454573944458029036.jpg,如果是App访问的话,这些图片就读取不出来了,因此通过存储过程来把字段中的图片路径,修改为带网络地址的路径。

思路:先将images字段,通过间隔符split成单个的图片地址,然后判断当前地址是否以http开头,如果不是,则加上http,然后把单个的图片地址再拼接起来,update到数据库中。

DROP FUNCTION IF EXISTS func_get_split_string_total;CREATE FUNCTION func_get_split_string_total(f_string TEXT,f_delimiter varchar(5)) RETURNS int(11)BEGIN	RETURN 1 + (length(f_string) - length(replace(f_string,f_delimiter,'')));END

定义方法,计算字符串通过,分隔符功能分隔成几段

DROP FUNCTION IF EXISTS func_split_str;CREATE FUNCTION func_split_str(  x VARCHAR(5000),  delim VARCHAR(12),  pos INT)RETURNS VARCHAR(500)BEGINRETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),       delim, '');END

定义方法取得通过分隔符分割成段的第几段字符。

CREATE PROCEDURE `pro_update_knowledge_images`()BEGIN	DECLARE done INT DEFAULT FALSE;	DECLARE kid INT;	DECLARE images VARCHAR(5000);	DECLARE new_img VARCHAR(200);	DECLARE new_imgs VARCHAR(5000);	DECLARE image_count INT;	DECLARE i_index INT;	DECLARE k_images_cursor CURSOR FOR		SELECT k.id,k.images		FROM ww_article_knowledge k		WHERE k.`status` = 1 AND k.images IS NOT NULL AND k.images!='';	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;	OPEN k_images_cursor;    read_loop:LOOP	FETCH k_images_cursor INTO kid,images;    IF done THEN        LEAVE read_loop;    END IF;	SET image_count = func_get_split_string_total(images,',');	SET i_index = 1;	SET new_imgs = '';	WHILE i_index<=image_count DO		SET new_img = func_split_str(images,',',i_index);		IF new_img  NOT LIKE 'http%' THEN		    SET new_img = CONCAT('http://uhome.haier.net:8280',new_img);		END IF;		IF i_index > 1 THEN		    SET new_imgs = CONCAT(new_imgs,',',new_img);		ELSE			SET new_imgs = new_img;		END IF;		SET i_index = i_index + 1;	END WHILE;	UPDATE ww_article_knowledge SET images=new_imgs WHERE id=kid;	COMMIT;	END LOOP;	CLOSE k_images_cursor;END

利用游标,对表的images字段进行处理。

转载于:https://my.oschina.net/friendship/blog/663171

你可能感兴趣的文章
Cisco ASA Failover配置实例 ZZ
查看>>
网络防火墙的配置与管理
查看>>
【桌面虚拟化】之五PCoIP
查看>>
游侠原创:安全狗“服云”深度评测!
查看>>
Linux内核高性能优化【生产环境实例】
查看>>
Windows Server 2016 和Windows 10的中Hyper-V虚拟机生产检查点
查看>>
Expression Blend使用笔刷
查看>>
思科交换机端口安全
查看>>
Silverlight C# 游戏开发:L6 3D摄像机
查看>>
XML和XMLSocket(一) -- XML的基础知识
查看>>
[强烈推荐]ORACLE SQL:经典查询练手第四篇(不懂装懂,永世饭桶!)
查看>>
Struts知识问答
查看>>
MongoDB实战(4)MapReduce
查看>>
FTP自动化上传的Shell脚本
查看>>
【C++11 并发编程教程 - Part 3 : 锁的进阶与条件变量(bill译)】
查看>>
换Vista啦
查看>>
jsp 教程(一)
查看>>
【移动开发】Android中异步加载数据(二)AsyncTask异步更新界面
查看>>
tomcat 访问日志源码分析与应用
查看>>
AIX 系统故障之--扩展文件系统故障
查看>>